window = global;
window.navigator = {
    appCodeName: "Mozilla",
    appName: "Netscape",
    appVersion: "5.0(windows NT 6.1;wow64)Applewebkit/537.36(KHML, like Gecko)Chrome/74.0.3729.169 safari/537.36",
    cookieEnabled: true,
    doNotTrack: null,
    hardwareConcurrency: 4,
    language: "zh-CN",
    languages: ["zh-CN", "zh"],
    maxTouchPoints: 0,
    onLine: true,
    platform: "Win32",
    product: "Gecko",
    productSub: "20030107",
    userAgent: "Mozilla/5.0 (windows NT 6.1;WOW64)Applewebkit/537.36(KHTML, likeGecko)chrome/74.0.3729.169 safari/537.36",
    vendor: "Google Inc",
    vendorSub: ""
};



var dbits;
var canary = 0xdeadbeefcafe;
var j_lm = 15715070 == (16777215 & canary);
function BigInteger(e, t, n) {
    if (null != e)
        if ("number" == typeof e)
            this.fromNumber(e, t, n);
        else if (null == t && "string" != typeof e)
            this.fromString(e, 256);
        else
            this.fromString(e, t);
}
function nbi() {
    return new BigInteger(null)
}
function am1(e, t, n, i, r, a) {
    for (; --a >= 0; ) {
        var s = t * this[e++] + n[i] + r;
        r = Math.floor(s / 67108864);
        n[i++] = 67108863 & s
    }
    return r
}
function am2(e, t, n, i, r, a) {
    var s = 32767 & t
        , o = t >> 15;
    for (; --a >= 0; ) {
        var c = 32767 & this[e];
        var l = this[e++] >> 15;
        var u = o * c + l * s;
        c = s * c + ((32767 & u) << 15) + n[i] + (1073741823 & r);
        r = (c >>> 30) + (u >>> 15) + o * l + (r >>> 30);
        n[i++] = 1073741823 & c
    }
    return r
}
function am3(e, t, n, i, r, a) {
    var s = 16383 & t
        , o = t >> 14;
    for (; --a >= 0; ) {
        var c = 16383 & this[e];
        var l = this[e++] >> 14;
        var u = o * c + l * s;
        c = s * c + ((16383 & u) << 14) + n[i] + r;
        r = (c >> 28) + (u >> 14) + o * l;
        n[i++] = 268435455 & c
    }
    return r
}
if (j_lm && "Microsoft Internet Explorer" == navigator.appName) {
    BigInteger.prototype.am = am2;
    dbits = 30
} else if (j_lm && "Netscape" != navigator.appName) {
    BigInteger.prototype.am = am1;
    dbits = 26
} else {
    BigInteger.prototype.am = am3;
    dbits = 28
}
BigInteger.prototype.DB = dbits;
BigInteger.prototype.DM = (1 << dbits) - 1;
BigInteger.prototype.DV = 1 << dbits;
var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2, BI_FP);
BigInteger.prototype.F1 = BI_FP - dbits;
BigInteger.prototype.F2 = 2 * dbits - BI_FP;
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
var BI_RC = new Array;
var rr, vv;
rr = "0".charCodeAt(0);
for (vv = 0; vv <= 9; ++vv)
    BI_RC[rr++] = vv;
rr = "a".charCodeAt(0);
for (vv = 10; vv < 36; ++vv)
    BI_RC[rr++] = vv;
rr = "A".charCodeAt(0);
for (vv = 10; vv < 36; ++vv)
    BI_RC[rr++] = vv;
function int2char(e) {
    return BI_RM.charAt(e)
}
function intAt(e, t) {
    var n = BI_RC[e.charCodeAt(t)];
    return null == n ? -1 : n
}
function bnpCopyTo(e) {
    for (var t = this.t - 1; t >= 0; --t)
        e[t] = this[t];
    e.t = this.t;
    e.s = this.s
}
function bnpFromInt(e) {
    this.t = 1;
    this.s = e < 0 ? -1 : 0;
    if (e > 0)
        this[0] = e;
    else if (e < -1)
        this[0] = e + DV;
    else
        this.t = 0
}
function nbv(e) {
    var t = nbi();
    t.fromInt(e);
    return t
}
function bnpFromString(e, t) {
    var n;
    if (16 == t)
        n = 4;
    else if (8 == t)
        n = 3;
    else if (256 == t)
        n = 8;
    else if (2 == t)
        n = 1;
    else if (32 == t)
        n = 5;
    else if (4 == t)
        n = 2;
    else {
        this.fromRadix(e, t);
        return
    }
    this.t = 0;
    this.s = 0;
    var i = e.length
        , r = !1
        , a = 0;
    for (; --i >= 0; ) {
        var s = 8 == n ? 255 & e[i] : intAt(e, i);
        if (!(s < 0)) {
            r = !1;
            if (0 == a)
                this[this.t++] = s;
            else if (a + n > this.DB) {
                this[this.t - 1] |= (s & (1 << this.DB - a) - 1) << a;
                this[this.t++] = s >> this.DB - a
            } else
                this[this.t - 1] |= s << a;
            a += n;
            if (a >= this.DB)
                a -= this.DB
        } else if ("-" == e.charAt(i))
            r = !0
    }
    if (8 == n && 0 != (128 & e[0])) {
        this.s = -1;
        if (a > 0)
            this[this.t - 1] |= (1 << this.DB - a) - 1 << a
    }
    this.clamp();
    if (r)
        BigInteger.ZERO.subTo(this, this)
}
function bnpClamp() {
    var e = this.s & this.DM;
    for (; this.t > 0 && this[this.t - 1] == e; )
        --this.t
}
function bnToString(e) {
    if (this.s < 0)
        return "-" + this.negate().toString(e);
    var t;
    if (16 == e)
        t = 4;
    else if (8 == e)
        t = 3;
    else if (2 == e)
        t = 1;
    else if (32 == e)
        t = 5;
    else if (4 == e)
        t = 2;
    else
        return this.toRadix(e);
    var n = (1 << t) - 1, i, r = !1, a = "", s = this.t;
    var o = this.DB - s * this.DB % t;
    if (s-- > 0) {
        if (o < this.DB && (i = this[s] >> o) > 0) {
            r = !0;
            a = int2char(i)
        }
        for (; s >= 0; ) {
            if (o < t) {
                i = (this[s] & (1 << o) - 1) << t - o;
                i |= this[--s] >> (o += this.DB - t)
            } else {
                i = this[s] >> (o -= t) & n;
                if (o <= 0) {
                    o += this.DB;
                    --s
                }
            }
            if (i > 0)
                r = !0;
            if (r)
                a += int2char(i)
        }
    }
    return r ? a : "0"
}
function bnNegate() {
    var e = nbi();
    BigInteger.ZERO.subTo(this, e);
    return e
}
function bnAbs() {
    return this.s < 0 ? this.negate() : this
}
function bnCompareTo(e) {
    var t = this.s - e.s;
    if (0 != t)
        return t;
    var n = this.t;
    t = n - e.t;
    if (0 != t)
        return this.s < 0 ? -t : t;
    for (; --n >= 0; )
        if (0 != (t = this[n] - e[n]))
            return t;
    return 0
}
function nbits(e) {
    var t = 1, n;
    if (0 != (n = e >>> 16)) {
        e = n;
        t += 16
    }
    if (0 != (n = e >> 8)) {
        e = n;
        t += 8
    }
    if (0 != (n = e >> 4)) {
        e = n;
        t += 4
    }
    if (0 != (n = e >> 2)) {
        e = n;
        t += 2
    }
    if (0 != (n = e >> 1)) {
        e = n;
        t += 1
    }
    return t
}
function bnBitLength() {
    if (this.t <= 0)
        return 0;
    else
        return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM)
}
function bnpDLShiftTo(e, t) {
    var n;
    for (n = this.t - 1; n >= 0; --n)
        t[n + e] = this[n];
    for (n = e - 1; n >= 0; --n)
        t[n] = 0;
    t.t = this.t + e;
    t.s = this.s
}
function bnpDRShiftTo(e, t) {
    for (var n = e; n < this.t; ++n)
        t[n - e] = this[n];
    t.t = Math.max(this.t - e, 0);
    t.s = this.s
}
function bnpLShiftTo(e, t) {
    var n = e % this.DB;
    var i = this.DB - n;
    var r = (1 << i) - 1;
    var a = Math.floor(e / this.DB), s = this.s << n & this.DM, o;
    for (o = this.t - 1; o >= 0; --o) {
        t[o + a + 1] = this[o] >> i | s;
        s = (this[o] & r) << n
    }
    for (o = a - 1; o >= 0; --o)
        t[o] = 0;
    t[a] = s;
    t.t = this.t + a + 1;
    t.s = this.s;
    t.clamp()
}
function bnpRShiftTo(e, t) {
    t.s = this.s;
    var n = Math.floor(e / this.DB);
    if (!(n >= this.t)) {
        var i = e % this.DB;
        var r = this.DB - i;
        var a = (1 << i) - 1;
        t[0] = this[n] >> i;
        for (var s = n + 1; s < this.t; ++s) {
            t[s - n - 1] |= (this[s] & a) << r;
            t[s - n] = this[s] >> i
        }
        if (i > 0)
            t[this.t - n - 1] |= (this.s & a) << r;
        t.t = this.t - n;
        t.clamp()
    } else
        t.t = 0
}
function bnpSubTo(e, t) {
    var n = 0
        , i = 0
        , r = Math.min(e.t, this.t);
    for (; n < r; ) {
        i += this[n] - e[n];
        t[n++] = i & this.DM;
        i >>= this.DB
    }
    if (e.t < this.t) {
        i -= e.s;
        for (; n < this.t; ) {
            i += this[n];
            t[n++] = i & this.DM;
            i >>= this.DB
        }
        i += this.s
    } else {
        i += this.s;
        for (; n < e.t; ) {
            i -= e[n];
            t[n++] = i & this.DM;
            i >>= this.DB
        }
        i -= e.s
    }
    t.s = i < 0 ? -1 : 0;
    if (i < -1)
        t[n++] = this.DV + i;
    else if (i > 0)
        t[n++] = i;
    t.t = n;
    t.clamp()
}
function bnpMultiplyTo(e, t) {
    var n = this.abs()
        , i = e.abs();
    var r = n.t;
    t.t = r + i.t;
    for (; --r >= 0; )
        t[r] = 0;
    for (r = 0; r < i.t; ++r)
        t[r + n.t] = n.am(0, i[r], t, r, 0, n.t);
    t.s = 0;
    t.clamp();
    if (this.s != e.s)
        BigInteger.ZERO.subTo(t, t)
}
function bnpSquareTo(e) {
    var t = this.abs();
    var n = e.t = 2 * t.t;
    for (; --n >= 0; )
        e[n] = 0;
    for (n = 0; n < t.t - 1; ++n) {
        var i = t.am(n, t[n], e, 2 * n, 0, 1);
        if ((e[n + t.t] += t.am(n + 1, 2 * t[n], e, 2 * n + 1, i, t.t - n - 1)) >= t.DV) {
            e[n + t.t] -= t.DV;
            e[n + t.t + 1] = 1
        }
    }
    if (e.t > 0)
        e[e.t - 1] += t.am(n, t[n], e, 2 * n, 0, 1);
    e.s = 0;
    e.clamp()
}
function bnpDivRemTo(e, t, n) {
    var i = e.abs();
    if (!(i.t <= 0)) {
        var r = this.abs();
        if (!(r.t < i.t)) {
            if (null == n)
                n = nbi();
            var a = nbi()
                , s = this.s
                , o = e.s;
            var c = this.DB - nbits(i[i.t - 1]);
            if (c > 0) {
                i.lShiftTo(c, a);
                r.lShiftTo(c, n)
            } else {
                i.copyTo(a);
                r.copyTo(n)
            }
            var l = a.t;
            var u = a[l - 1];
            if (0 != u) {
                var d = u * (1 << this.F1) + (l > 1 ? a[l - 2] >> this.F2 : 0);
                var _ = this.FV / d
                    , h = (1 << this.F1) / d
                    , f = 1 << this.F2;
                var p = n.t
                    , g = p - l
                    , m = null == t ? nbi() : t;
                a.dlShiftTo(g, m);
                if (n.compareTo(m) >= 0) {
                    n[n.t++] = 1;
                    n.subTo(m, n)
                }
                BigInteger.ONE.dlShiftTo(l, m);
                m.subTo(a, a);
                for (; a.t < l; )
                    a[a.t++] = 0;
                for (; --g >= 0; ) {
                    var b = n[--p] == u ? this.DM : Math.floor(n[p] * _ + (n[p - 1] + f) * h);
                    if ((n[p] += a.am(0, b, n, g, 0, l)) < b) {
                        a.dlShiftTo(g, m);
                        n.subTo(m, n);
                        for (; n[p] < --b; )
                            n.subTo(m, n)
                    }
                }
                if (null != t) {
                    n.drShiftTo(l, t);
                    if (s != o)
                        BigInteger.ZERO.subTo(t, t)
                }
                n.t = l;
                n.clamp();
                if (c > 0)
                    n.rShiftTo(c, n);
                if (s < 0)
                    BigInteger.ZERO.subTo(n, n)
            }
        } else {
            if (null != t)
                t.fromInt(0);
            if (null != n)
                this.copyTo(n)
        }
    }
}
function bnMod(e) {
    var t = nbi();
    this.abs().divRemTo(e, null, t);
    if (this.s < 0 && t.compareTo(BigInteger.ZERO) > 0)
        e.subTo(t, t);
    return t
}
function Classic(e) {
    this.m = e
}
function cConvert(e) {
    if (e.s < 0 || e.compareTo(this.m) >= 0)
        return e.mod(this.m);
    else
        return e
}
function cRevert(e) {
    return e
}
function cReduce(e) {
    e.divRemTo(this.m, null, e)
}
function cMulTo(e, t, n) {
    e.multiplyTo(t, n);
    this.reduce(n)
}
function cSqrTo(e, t) {
    e.squareTo(t);
    this.reduce(t)
}
Classic.prototype.convert = cConvert;
Classic.prototype.revert = cRevert;
Classic.prototype.reduce = cReduce;
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;
function bnpInvDigit() {
    if (this.t < 1)
        return 0;
    var e = this[0];
    if (0 == (1 & e))
        return 0;
    var t = 3 & e;
    t = t * (2 - (15 & e) * t) & 15;
    t = t * (2 - (255 & e) * t) & 255;
    t = t * (2 - ((65535 & e) * t & 65535)) & 65535;
    t = t * (2 - e * t % this.DV) % this.DV;
    return t > 0 ? this.DV - t : -t
}
function Montgomery(e) {
    this.m = e;
    this.mp = e.invDigit();
    this.mpl = 32767 & this.mp;
    this.mph = this.mp >> 15;
    this.um = (1 << e.DB - 15) - 1;
    this.mt2 = 2 * e.t
}
function montConvert(e) {
    var t = nbi();
    e.abs().dlShiftTo(this.m.t, t);
    t.divRemTo(this.m, null, t);
    if (e.s < 0 && t.compareTo(BigInteger.ZERO) > 0)
        this.m.subTo(t, t);
    return t
}
function montRevert(e) {
    var t = nbi();
    e.copyTo(t);
    this.reduce(t);
    return t
}
function montReduce(e) {
    for (; e.t <= this.mt2; )
        e[e.t++] = 0;
    for (var t = 0; t < this.m.t; ++t) {
        var n = 32767 & e[t];
        var i = n * this.mpl + ((n * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
        n = t + this.m.t;
        e[n] += this.m.am(0, i, e, t, 0, this.m.t);
        for (; e[n] >= e.DV; ) {
            e[n] -= e.DV;
            e[++n]++
        }
    }
    e.clamp();
    e.drShiftTo(this.m.t, e);
    if (e.compareTo(this.m) >= 0)
        e.subTo(this.m, e)
}
function montSqrTo(e, t) {
    e.squareTo(t);
    this.reduce(t)
}
function montMulTo(e, t, n) {
    e.multiplyTo(t, n);
    this.reduce(n)
}
Montgomery.prototype.convert = montConvert;
Montgomery.prototype.revert = montRevert;
Montgomery.prototype.reduce = montReduce;
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;
function bnpIsEven() {
    return 0 == (this.t > 0 ? 1 & this[0] : this.s)
}
function bnpExp(e, t) {
    if (e > 4294967295 || e < 1)
        return BigInteger.ONE;
    var n = nbi()
        , i = nbi()
        , r = t.convert(this)
        , a = nbits(e) - 1;
    r.copyTo(n);
    for (; --a >= 0; ) {
        t.sqrTo(n, i);
        if ((e & 1 << a) > 0)
            t.mulTo(i, r, n);
        else {
            var s = n;
            n = i;
            i = s
        }
    }
    return t.revert(n)
}
function bnModPowInt(e, t) {
    var n;
    if (e < 256 || t.isEven())
        n = new Classic(t);
    else
        n = new Montgomery(t);
    return this.exp(e, n)
}
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromInt;
BigInteger.prototype.fromString = bnpFromString;
BigInteger.prototype.clamp = bnpClamp;
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvDigit;
BigInteger.prototype.isEven = bnpIsEven;
BigInteger.prototype.exp = bnpExp;
BigInteger.prototype.toString = bnToString;
BigInteger.prototype.negate = bnNegate;
BigInteger.prototype.abs = bnAbs;
BigInteger.prototype.compareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitLength;
BigInteger.prototype.mod = bnMod;
BigInteger.prototype.modPowInt = bnModPowInt;
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);
function bnClone() {
    var e = nbi();
    this.copyTo(e);
    return e
}
function bnIntValue() {
    if (this.s < 0) {
        if (1 == this.t)
            return this[0] - this.DV;
        else if (0 == this.t)
            return -1
    } else if (1 == this.t)
        return this[0];
    else if (0 == this.t)
        return 0;
    return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
}
function bnByteValue() {
    return 0 == this.t ? this.s : this[0] << 24 >> 24
}
function bnShortValue() {
    return 0 == this.t ? this.s : this[0] << 16 >> 16
}
function bnpChunkSize(e) {
    return Math.floor(Math.LN2 * this.DB / Math.log(e))
}
function bnSigNum() {
    if (this.s < 0)
        return -1;
    else if (this.t <= 0 || 1 == this.t && this[0] <= 0)
        return 0;
    else
        return 1
}
function bnpToRadix(e) {
    if (null == e)
        e = 10;
    if (0 == this.signum() || e < 2 || e > 36)
        return "0";
    var t = this.chunkSize(e);
    var n = Math.pow(e, t);
    var i = nbv(n)
        , r = nbi()
        , a = nbi()
        , s = "";
    this.divRemTo(i, r, a);
    for (; r.signum() > 0; ) {
        s = (n + a.intValue()).toString(e).substr(1) + s;
        r.divRemTo(i, r, a)
    }
    return a.intValue().toString(e) + s
}
function bnpFromRadix(e, t) {
    this.fromInt(0);
    if (null == t)
        t = 10;
    var n = this.chunkSize(t);
    var i = Math.pow(t, n)
        , r = !1
        , a = 0
        , s = 0;
    for (var o = 0; o < e.length; ++o) {
        var c = intAt(e, o);
        if (!(c < 0)) {
            s = t * s + c;
            if (++a >= n) {
                this.dMultiply(i);
                this.dAddOffset(s, 0);
                a = 0;
                s = 0
            }
        } else if ("-" == e.charAt(o) && 0 == this.signum())
            r = !0
    }
    if (a > 0) {
        this.dMultiply(Math.pow(t, a));
        this.dAddOffset(s, 0)
    }
    if (r)
        BigInteger.ZERO.subTo(this, this)
}
function bnpFromNumber(e, t, n) {
    if ("number" == typeof t)
        if (e < 2)
            this.fromInt(1);
        else {
            this.fromNumber(e, n);
            if (!this.testBit(e - 1))
                this.bitwiseTo(BigInteger.ONE.shiftLeft(e - 1), op_or, this);
            if (this.isEven())
                this.dAddOffset(1, 0);
            for (; !this.isProbablePrime(t); ) {
                this.dAddOffset(2, 0);
                if (this.bitLength() > e)
                    this.subTo(BigInteger.ONE.shiftLeft(e - 1), this)
            }
        }
    else {
        var i = new Array
            , r = 7 & e;
        i.length = (e >> 3) + 1;
        t.nextBytes(i);
        if (r > 0)
            i[0] &= (1 << r) - 1;
        else
            i[0] = 0;
        this.fromString(i, 256)
    }
}
function bnToByteArray() {
    var e = this.t
        , t = new Array;
    t[0] = this.s;
    var n = this.DB - e * this.DB % 8, i, r = 0;
    if (e-- > 0) {
        if (n < this.DB && (i = this[e] >> n) != (this.s & this.DM) >> n)
            t[r++] = i | this.s << this.DB - n;
        for (; e >= 0; ) {
            if (n < 8) {
                i = (this[e] & (1 << n) - 1) << 8 - n;
                i |= this[--e] >> (n += this.DB - 8)
            } else {
                i = this[e] >> (n -= 8) & 255;
                if (n <= 0) {
                    n += this.DB;
                    --e
                }
            }
            if (0 != (128 & i))
                i |= -256;
            if (0 == r && (128 & this.s) != (128 & i))
                ++r;
            if (r > 0 || i != this.s)
                t[r++] = i
        }
    }
    return t
}
function bnEquals(e) {
    return 0 == this.compareTo(e)
}
function bnMin(e) {
    return this.compareTo(e) < 0 ? this : e
}
function bnMax(e) {
    return this.compareTo(e) > 0 ? this : e
}
function bnpBitwiseTo(e, t, n) {
    var i, r, a = Math.min(e.t, this.t);
    for (i = 0; i < a; ++i)
        n[i] = t(this[i], e[i]);
    if (e.t < this.t) {
        r = e.s & this.DM;
        for (i = a; i < this.t; ++i)
            n[i] = t(this[i], r);
        n.t = this.t
    } else {
        r = this.s & this.DM;
        for (i = a; i < e.t; ++i)
            n[i] = t(r, e[i]);
        n.t = e.t
    }
    n.s = t(this.s, e.s);
    n.clamp()
}
function op_and(e, t) {
    return e & t
}
function bnAnd(e) {
    var t = nbi();
    this.bitwiseTo(e, op_and, t);
    return t
}
function op_or(e, t) {
    return e | t
}
function bnOr(e) {
    var t = nbi();
    this.bitwiseTo(e, op_or, t);
    return t
}
function op_xor(e, t) {
    return e ^ t
}
function bnXor(e) {
    var t = nbi();
    this.bitwiseTo(e, op_xor, t);
    return t
}
function op_andnot(e, t) {
    return e & ~t
}
function bnAndNot(e) {
    var t = nbi();
    this.bitwiseTo(e, op_andnot, t);
    return t
}
function bnNot() {
    var e = nbi();
    for (var t = 0; t < this.t; ++t)
        e[t] = this.DM & ~this[t];
    e.t = this.t;
    e.s = ~this.s;
    return e
}
function bnShiftLeft(e) {
    var t = nbi();
    if (e < 0)
        this.rShiftTo(-e, t);
    else
        this.lShiftTo(e, t);
    return t
}
function bnShiftRight(e) {
    var t = nbi();
    if (e < 0)
        this.lShiftTo(-e, t);
    else
        this.rShiftTo(e, t);
    return t
}
function lbit(e) {
    if (0 == e)
        return -1;
    var t = 0;
    if (0 == (65535 & e)) {
        e >>= 16;
        t += 16
    }
    if (0 == (255 & e)) {
        e >>= 8;
        t += 8
    }
    if (0 == (15 & e)) {
        e >>= 4;
        t += 4
    }
    if (0 == (3 & e)) {
        e >>= 2;
        t += 2
    }
    if (0 == (1 & e))
        ++t;
    return t
}
function bnGetLowestSetBit() {
    for (var e = 0; e < this.t; ++e)
        if (0 != this[e])
            return e * this.DB + lbit(this[e]);
    if (this.s < 0)
        return this.t * this.DB;
    else
        return -1
}
function cbit(e) {
    var t = 0;
    for (; 0 != e; ) {
        e &= e - 1;
        ++t
    }
    return t
}
function bnBitCount() {
    var e = 0
        , t = this.s & this.DM;
    for (var n = 0; n < this.t; ++n)
        e += cbit(this[n] ^ t);
    return e
}
function bnTestBit(e) {
    var t = Math.floor(e / this.DB);
    if (t >= this.t)
        return 0 != this.s;
    else
        return 0 != (this[t] & 1 << e % this.DB)
}
function bnpChangeBit(e, t) {
    var n = BigInteger.ONE.shiftLeft(e);
    this.bitwiseTo(n, t, n);
    return n
}
function bnSetBit(e) {
    return this.changeBit(e, op_or)
}
function bnClearBit(e) {
    return this.changeBit(e, op_andnot)
}
function bnFlipBit(e) {
    return this.changeBit(e, op_xor)
}
function bnpAddTo(e, t) {
    var n = 0
        , i = 0
        , r = Math.min(e.t, this.t);
    for (; n < r; ) {
        i += this[n] + e[n];
        t[n++] = i & this.DM;
        i >>= this.DB
    }
    if (e.t < this.t) {
        i += e.s;
        for (; n < this.t; ) {
            i += this[n];
            t[n++] = i & this.DM;
            i >>= this.DB
        }
        i += this.s
    } else {
        i += this.s;
        for (; n < e.t; ) {
            i += e[n];
            t[n++] = i & this.DM;
            i >>= this.DB
        }
        i += e.s
    }
    t.s = i < 0 ? -1 : 0;
    if (i > 0)
        t[n++] = i;
    else if (i < -1)
        t[n++] = this.DV + i;
    t.t = n;
    t.clamp()
}
function bnAdd(e) {
    var t = nbi();
    this.addTo(e, t);
    return t
}
function bnSubtract(e) {
    var t = nbi();
    this.subTo(e, t);
    return t
}
function bnMultiply(e) {
    var t = nbi();
    this.multiplyTo(e, t);
    return t
}
function bnSquare() {
    var e = nbi();
    this.squareTo(e);
    return e
}
function bnDivide(e) {
    var t = nbi();
    this.divRemTo(e, t, null);
    return t
}
function bnRemainder(e) {
    var t = nbi();
    this.divRemTo(e, null, t);
    return t
}
function bnDivideAndRemainder(e) {
    var t = nbi()
        , n = nbi();
    this.divRemTo(e, t, n);
    return new Array(t,n)
}
function bnpDMultiply(e) {
    this[this.t] = this.am(0, e - 1, this, 0, 0, this.t);
    ++this.t;
    this.clamp()
}
function bnpDAddOffset(e, t) {
    if (0 != e) {
        for (; this.t <= t; )
            this[this.t++] = 0;
        this[t] += e;
        for (; this[t] >= this.DV; ) {
            this[t] -= this.DV;
            if (++t >= this.t)
                this[this.t++] = 0;
            ++this[t]
        }
    }
}
function NullExp() {}
function nNop(e) {
    return e
}
function nMulTo(e, t, n) {
    e.multiplyTo(t, n)
}
function nSqrTo(e, t) {
    e.squareTo(t)
}
NullExp.prototype.convert = nNop;
NullExp.prototype.revert = nNop;
NullExp.prototype.mulTo = nMulTo;
NullExp.prototype.sqrTo = nSqrTo;
function bnPow(e) {
    return this.exp(e, new NullExp)
}
function bnpMultiplyLowerTo(e, t, n) {
    var i = Math.min(this.t + e.t, t);
    n.s = 0;
    n.t = i;
    for (; i > 0; )
        n[--i] = 0;
    var r;
    for (r = n.t - this.t; i < r; ++i)
        n[i + this.t] = this.am(0, e[i], n, i, 0, this.t);
    for (r = Math.min(e.t, t); i < r; ++i)
        this.am(0, e[i], n, i, 0, t - i);
    n.clamp()
}
function bnpMultiplyUpperTo(e, t, n) {
    --t;
    var i = n.t = this.t + e.t - t;
    n.s = 0;
    for (; --i >= 0; )
        n[i] = 0;
    for (i = Math.max(t - this.t, 0); i < e.t; ++i)
        n[this.t + i - t] = this.am(t - i, e[i], n, 0, 0, this.t + i - t);
    n.clamp();
    n.drShiftTo(1, n)
}
function Barrett(e) {
    this.r2 = nbi();
    this.q3 = nbi();
    BigInteger.ONE.dlShiftTo(2 * e.t, this.r2);
    this.mu = this.r2.divide(e);
    this.m = e
}
function barrettConvert(e) {
    if (e.s < 0 || e.t > 2 * this.m.t)
        return e.mod(this.m);
    else if (e.compareTo(this.m) < 0)
        return e;
    else {
        var t = nbi();
        e.copyTo(t);
        this.reduce(t);
        return t
    }
}
function barrettRevert(e) {
    return e
}
function barrettReduce(e) {
    e.drShiftTo(this.m.t - 1, this.r2);
    if (e.t > this.m.t + 1) {
        e.t = this.m.t + 1;
        e.clamp()
    }
    this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);
    this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
    for (; e.compareTo(this.r2) < 0; )
        e.dAddOffset(1, this.m.t + 1);
    e.subTo(this.r2, e);
    for (; e.compareTo(this.m) >= 0; )
        e.subTo(this.m, e)
}
function barrettSqrTo(e, t) {
    e.squareTo(t);
    this.reduce(t)
}
function barrettMulTo(e, t, n) {
    e.multiplyTo(t, n);
    this.reduce(n)
}
Barrett.prototype.convert = barrettConvert;
Barrett.prototype.revert = barrettRevert;
Barrett.prototype.reduce = barrettReduce;
Barrett.prototype.mulTo = barrettMulTo;
Barrett.prototype.sqrTo = barrettSqrTo;
function bnModPow(e, t) {
    var n = e.bitLength(), i, r = nbv(1), a;
    if (n <= 0)
        return r;
    else if (n < 18)
        i = 1;
    else if (n < 48)
        i = 3;
    else if (n < 144)
        i = 4;
    else if (n < 768)
        i = 5;
    else
        i = 6;
    if (n < 8)
        a = new Classic(t);
    else if (t.isEven())
        a = new Barrett(t);
    else
        a = new Montgomery(t);
    var s = new Array
        , o = 3
        , c = i - 1
        , l = (1 << i) - 1;
    s[1] = a.convert(this);
    if (i > 1) {
        var u = nbi();
        a.sqrTo(s[1], u);
        for (; o <= l; ) {
            s[o] = nbi();
            a.mulTo(u, s[o - 2], s[o]);
            o += 2
        }
    }
    var d = e.t - 1, _, h = !0, f = nbi(), p;
    n = nbits(e[d]) - 1;
    for (; d >= 0; ) {
        if (n >= c)
            _ = e[d] >> n - c & l;
        else {
            _ = (e[d] & (1 << n + 1) - 1) << c - n;
            if (d > 0)
                _ |= e[d - 1] >> this.DB + n - c
        }
        o = i;
        for (; 0 == (1 & _); ) {
            _ >>= 1;
            --o
        }
        if ((n -= o) < 0) {
            n += this.DB;
            --d
        }
        if (h) {
            s[_].copyTo(r);
            h = !1
        } else {
            for (; o > 1; ) {
                a.sqrTo(r, f);
                a.sqrTo(f, r);
                o -= 2
            }
            if (o > 0)
                a.sqrTo(r, f);
            else {
                p = r;
                r = f;
                f = p
            }
            a.mulTo(f, s[_], r)
        }
        for (; d >= 0 && 0 == (e[d] & 1 << n); ) {
            a.sqrTo(r, f);
            p = r;
            r = f;
            f = p;
            if (--n < 0) {
                n = this.DB - 1;
                --d
            }
        }
    }
    return a.revert(r)
}
function bnGCD(e) {
    var t = this.s < 0 ? this.negate() : this.clone();
    var n = e.s < 0 ? e.negate() : e.clone();
    if (t.compareTo(n) < 0) {
        var i = t;
        t = n;
        n = i
    }
    var r = t.getLowestSetBit()
        , a = n.getLowestSetBit();
    if (a < 0)
        return t;
    if (r < a)
        a = r;
    if (a > 0) {
        t.rShiftTo(a, t);
        n.rShiftTo(a, n)
    }
    for (; t.signum() > 0; ) {
        if ((r = t.getLowestSetBit()) > 0)
            t.rShiftTo(r, t);
        if ((r = n.getLowestSetBit()) > 0)
            n.rShiftTo(r, n);
        if (t.compareTo(n) >= 0) {
            t.subTo(n, t);
            t.rShiftTo(1, t)
        } else {
            n.subTo(t, n);
            n.rShiftTo(1, n)
        }
    }
    if (a > 0)
        n.lShiftTo(a, n);
    return n
}
function bnpModInt(e) {
    if (e <= 0)
        return 0;
    var t = this.DV % e
        , n = this.s < 0 ? e - 1 : 0;
    if (this.t > 0)
        if (0 == t)
            n = this[0] % e;
        else
            for (var i = this.t - 1; i >= 0; --i)
                n = (t * n + this[i]) % e;
    return n
}
function bnModInverse(e) {
    var t = e.isEven();
    if (this.isEven() && t || 0 == e.signum())
        return BigInteger.ZERO;
    var n = e.clone()
        , i = this.clone();
    var r = nbv(1)
        , a = nbv(0)
        , s = nbv(0)
        , o = nbv(1);
    for (; 0 != n.signum(); ) {
        for (; n.isEven(); ) {
            n.rShiftTo(1, n);
            if (t) {
                if (!r.isEven() || !a.isEven()) {
                    r.addTo(this, r);
                    a.subTo(e, a)
                }
                r.rShiftTo(1, r)
            } else if (!a.isEven())
                a.subTo(e, a);
            a.rShiftTo(1, a)
        }
        for (; i.isEven(); ) {
            i.rShiftTo(1, i);
            if (t) {
                if (!s.isEven() || !o.isEven()) {
                    s.addTo(this, s);
                    o.subTo(e, o)
                }
                s.rShiftTo(1, s)
            } else if (!o.isEven())
                o.subTo(e, o);
            o.rShiftTo(1, o)
        }
        if (n.compareTo(i) >= 0) {
            n.subTo(i, n);
            if (t)
                r.subTo(s, r);
            a.subTo(o, a)
        } else {
            i.subTo(n, i);
            if (t)
                s.subTo(r, s);
            o.subTo(a, o)
        }
    }
    if (0 != i.compareTo(BigInteger.ONE))
        return BigInteger.ZERO;
    if (o.compareTo(e) >= 0)
        return o.subtract(e);
    if (o.signum() < 0)
        o.addTo(e, o);
    else
        return o;
    if (o.signum() < 0)
        return o.add(e);
    else
        return o
}
var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];
var lplim = (1 << 26) / lowprimes[lowprimes.length - 1];
function bnIsProbablePrime(e) {
    var t, n = this.abs();
    if (1 == n.t && n[0] <= lowprimes[lowprimes.length - 1]) {
        for (t = 0; t < lowprimes.length; ++t)
            if (n[0] == lowprimes[t])
                return !0;
        return !1
    }
    if (n.isEven())
        return !1;
    t = 1;
    for (; t < lowprimes.length; ) {
        var i = lowprimes[t]
            , r = t + 1;
        for (; r < lowprimes.length && i < lplim; )
            i *= lowprimes[r++];
        i = n.modInt(i);
        for (; t < r; )
            if (i % lowprimes[t++] == 0)
                return !1
    }
    return n.millerRabin(e)
}
function bnpMillerRabin(e) {
    var t = this.subtract(BigInteger.ONE);
    var n = t.getLowestSetBit();
    if (n <= 0)
        return !1;
    var i = t.shiftRight(n);
    e = e + 1 >> 1;
    if (e > lowprimes.length)
        e = lowprimes.length;
    var r = nbi();
    for (var a = 0; a < e; ++a) {
        r.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);
        var s = r.modPow(i, this);
        if (0 != s.compareTo(BigInteger.ONE) && 0 != s.compareTo(t)) {
            var o = 1;
            for (; o++ < n && 0 != s.compareTo(t); ) {
                s = s.modPowInt(2, this);
                if (0 == s.compareTo(BigInteger.ONE))
                    return !1
            }
            if (0 != s.compareTo(t))
                return !1
        }
    }
    return !0
}
BigInteger.prototype.chunkSize = bnpChunkSize;
BigInteger.prototype.toRadix = bnpToRadix;
BigInteger.prototype.fromRadix = bnpFromRadix;
BigInteger.prototype.fromNumber = bnpFromNumber;
BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
BigInteger.prototype.changeBit = bnpChangeBit;
BigInteger.prototype.addTo = bnpAddTo;
BigInteger.prototype.dMultiply = bnpDMultiply;
BigInteger.prototype.dAddOffset = bnpDAddOffset;
BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
BigInteger.prototype.modInt = bnpModInt;
BigInteger.prototype.millerRabin = bnpMillerRabin;
BigInteger.prototype.clone = bnClone;
BigInteger.prototype.intValue = bnIntValue;
BigInteger.prototype.byteValue = bnByteValue;
BigInteger.prototype.shortValue = bnShortValue;
BigInteger.prototype.signum = bnSigNum;
BigInteger.prototype.toByteArray = bnToByteArray;
BigInteger.prototype.equals = bnEquals;
BigInteger.prototype.min = bnMin;
BigInteger.prototype.max = bnMax;
BigInteger.prototype.and = bnAnd;
BigInteger.prototype.or = bnOr;
BigInteger.prototype.xor = bnXor;
BigInteger.prototype.andNot = bnAndNot;
BigInteger.prototype.not = bnNot;
BigInteger.prototype.shiftLeft = bnShiftLeft;
BigInteger.prototype.shiftRight = bnShiftRight;
BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
BigInteger.prototype.bitCount = bnBitCount;
BigInteger.prototype.testBit = bnTestBit;
BigInteger.prototype.setBit = bnSetBit;
BigInteger.prototype.clearBit = bnClearBit;
BigInteger.prototype.flipBit = bnFlipBit;
BigInteger.prototype.add = bnAdd;
BigInteger.prototype.subtract = bnSubtract;
BigInteger.prototype.multiply = bnMultiply;
BigInteger.prototype.divide = bnDivide;
BigInteger.prototype.remainder = bnRemainder;
BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
BigInteger.prototype.modPow = bnModPow;
BigInteger.prototype.modInverse = bnModInverse;
BigInteger.prototype.pow = bnPow;
BigInteger.prototype.gcd = bnGCD;
BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
BigInteger.prototype.square = bnSquare;
if ("object" != typeof JSON)
    JSON = {};
!function() {
    "use strict";
    function f(e) {
        return e < 10 ? "0" + e : e
    }
    function quote(e) {
        escapable.lastIndex = 0;
        return escapable.test(e) ? '"' + e.replace(escapable, function(e) {
            var t = meta[e];
            return "string" == typeof t ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
        }) + '"' : '"' + e + '"'
    }
    function str(e, t) {
        var n, i, r, a, s = gap, o, c = t[e];
        if (c && "object" == typeof c && "function" == typeof c.toJSON)
            c = c.toJSON(e);
        if ("function" == typeof rep)
            c = rep.call(t, e, c);
        switch (typeof c) {
            case "string":
                return quote(c);
            case "number":
                return isFinite(c) ? String(c) : "null";
            case "boolean":
            case "null":
                return String(c);
            case "object":
                if (!c)
                    return "null";
                gap += indent;
                o = [];
                if ("[object Array]" === Object.prototype.toString.apply(c)) {
                    a = c.length;
                    for (n = 0; n < a; n += 1)
                        o[n] = str(n, c) || "null";
                    r = 0 === o.length ? "[]" : gap ? "[\n" + gap + o.join(",\n" + gap) + "\n" + s + "]" : "[" + o.join(",") + "]";
                    gap = s;
                    return r
                }
                if (rep && "object" == typeof rep) {
                    a = rep.length;
                    for (n = 0; n < a; n += 1)
                        if ("string" == typeof rep[n]) {
                            i = rep[n];
                            r = str(i, c);
                            if (r)
                                o.push(quote(i) + (gap ? ": " : ":") + r)
                        }
                } else
                    for (i in c)
                        if (Object.prototype.hasOwnProperty.call(c, i)) {
                            r = str(i, c);
                            if (r)
                                o.push(quote(i) + (gap ? ": " : ":") + r)
                        }
                r = 0 === o.length ? "{}" : gap ? "{\n" + gap + o.join(",\n" + gap) + "\n" + s + "}" : "{" + o.join(",") + "}";
                gap = s;
                return r
        }
    }
    if ("function" != typeof Date.prototype.toJSON) {
        Date.prototype.toJSON = function() {
            return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
        }
        ;
        String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() {
            return this.valueOf()
        }
    }
    var cx, escapable, gap, indent, meta, rep;
    if ("function" != typeof JSON.stringify) {
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
        meta = {
            "\b": "\\b",
            "\t": "\\t",
            "\n": "\\n",
            "\f": "\\f",
            "\r": "\\r",
            '"': '\\"',
            "\\": "\\\\"
        };
        JSON.stringify = function(e, t, n) {
            var i;
            gap = "";
            indent = "";
            if ("number" == typeof n)
                for (i = 0; i < n; i += 1)
                    indent += " ";
            else if ("string" == typeof n)
                indent = n;
            rep = t;
            if (t && "function" != typeof t && ("object" != typeof t || "number" != typeof t.length))
                throw new Error("JSON.stringify");
            return str("", {
                "": e
            })
        }
    }
    if ("function" != typeof JSON.parse) {
        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
        JSON.parse = function(text, reviver) {
            function walk(e, t) {
                var n, i, r = e[t];
                if (r && "object" == typeof r)
                    for (n in r)
                        if (Object.prototype.hasOwnProperty.call(r, n)) {
                            i = walk(r, n);
                            if (void 0 !== i)
                                r[n] = i;
                            else
                                delete r[n]
                        }
                return reviver.call(e, t, r)
            }
            var j;
            text = String(text);
            cx.lastIndex = 0;
            if (cx.test(text))
                text = text.replace(cx, function(e) {
                    return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
                });
            if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
                j = eval("(" + text + ")");
                return "function" == typeof reviver ? walk({
                    "": j
                }, "") : j
            }
            throw new SyntaxError("JSON.parse")
        }
    }
}();
var RSAPublicKey = function(e, t) {
    this.modulus = new BigInteger(Hex.encode(e),16);
    this.encryptionExponent = new BigInteger(Hex.encode(t),16)
};
var UTF8 = {
    encode: function(e) {
        e = e.replace(/\r\n/g, "\n");
        var t = "";
        for (var n = 0; n < e.length; n++) {
            var i = e.charCodeAt(n);
            if (i < 128)
                t += String.fromCharCode(i);
            else if (i > 127 && i < 2048) {
                t += String.fromCharCode(i >> 6 | 192);
                t += String.fromCharCode(63 & i | 128)
            } else {
                t += String.fromCharCode(i >> 12 | 224);
                t += String.fromCharCode(i >> 6 & 63 | 128);
                t += String.fromCharCode(63 & i | 128)
            }
        }
        return t
    },
    decode: function(e) {
        var t = "";
        var n = 0;
        var i = $c1 = $c2 = 0;
        for (; n < e.length; ) {
            i = e.charCodeAt(n);
            if (i < 128) {
                t += String.fromCharCode(i);
                n++
            } else if (i > 191 && i < 224) {
                $c2 = e.charCodeAt(n + 1);
                t += String.fromCharCode((31 & i) << 6 | 63 & $c2);
                n += 2
            } else {
                $c2 = e.charCodeAt(n + 1);
                $c3 = e.charCodeAt(n + 2);
                t += String.fromCharCode((15 & i) << 12 | (63 & $c2) << 6 | 63 & $c3);
                n += 3
            }
        }
        return t
    }
};
var Base64 = {
    base64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    encode: function(e) {
        if (!e)
            return !1;
        var t = "";
        var n, i, r;
        var a, s, o, c;
        var l = 0;
        do {
            n = e.charCodeAt(l++);
            i = e.charCodeAt(l++);
            r = e.charCodeAt(l++);
            a = n >> 2;
            s = (3 & n) << 4 | i >> 4;
            o = (15 & i) << 2 | r >> 6;
            c = 63 & r;
            if (isNaN(i))
                o = c = 64;
            else if (isNaN(r))
                c = 64;
            t += this.base64.charAt(a) + this.base64.charAt(s) + this.base64.charAt(o) + this.base64.charAt(c)
        } while (l < e.length);
        return t
    },
    decode: function(e) {
        if (!e)
            return !1;
        e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        var t = "";
        var n, i, r, a;
        var s = 0;
        do {
            n = this.base64.indexOf(e.charAt(s++));
            i = this.base64.indexOf(e.charAt(s++));
            r = this.base64.indexOf(e.charAt(s++));
            a = this.base64.indexOf(e.charAt(s++));
            t += String.fromCharCode(n << 2 | i >> 4);
            if (64 != r)
                t += String.fromCharCode((15 & i) << 4 | r >> 2);
            if (64 != a)
                t += String.fromCharCode((3 & r) << 6 | a)
        } while (s < e.length);
        return t
    }
};
var Hex = {
    hex: "0123456789abcdef",
    encode: function(e) {
        if (!e)
            return !1;
        var t = "";
        var n;
        var i = 0;
        do {
            n = e.charCodeAt(i++);
            t += this.hex.charAt(n >> 4 & 15) + this.hex.charAt(15 & n)
        } while (i < e.length);
        return t
    },
    decode: function(e) {
        if (!e)
            return !1;
        e = e.replace(/[^0-9abcdef]/g, "");
        var t = "";
        var n = 0;
        do
            t += String.fromCharCode(this.hex.indexOf(e.charAt(n++)) << 4 & 240 | 15 & this.hex.indexOf(e.charAt(n++)));
        while (n < e.length);
        return t
    }
};
var ASN1Data = function(e) {
    this.error = !1;
    this.parse = function(e) {
        if (!e) {
            this.error = !0;
            return null
        }
        var t = [];
        for (; e.length > 0; ) {
            var n = e.charCodeAt(0);
            e = e.substr(1);
            var i = 0;
            if (5 == (31 & n))
                e = e.substr(1);
            else if (128 & e.charCodeAt(0)) {
                var r = 127 & e.charCodeAt(0);
                e = e.substr(1);
                if (r > 0)
                    i = e.charCodeAt(0);
                if (r > 1)
                    i = i << 8 | e.charCodeAt(1);
                if (r > 2) {
                    this.error = !0;
                    return null
                }
                e = e.substr(r)
            } else {
                i = e.charCodeAt(0);
                e = e.substr(1)
            }
            var a = "";
            if (i) {
                if (i > e.length) {
                    this.error = !0;
                    return null
                }
                a = e.substr(0, i);
                e = e.substr(i)
            }
            if (32 & n)
                t.push(this.parse(a));
            else
                t.push(this.value(128 & n ? 4 : 31 & n, a))
        }
        return t
    }
    ;
    this.value = function(e, t) {
        if (1 == e)
            return t ? !0 : !1;
        else if (2 == e)
            return t;
        else if (3 == e)
            return this.parse(t.substr(1));
        else if (5 == e)
            return null;
        else if (6 == e) {
            var n = [];
            var i = t.charCodeAt(0);
            n.push(Math.floor(i / 40));
            n.push(i - 40 * n[0]);
            var r = [];
            var a = 0;
            var s;
            for (s = 1; s < t.length; s++) {
                var o = t.charCodeAt(s);
                r.push(127 & o);
                if (128 & o)
                    a++;
                else {
                    var c;
                    var l = 0;
                    for (c = 0; c < r.length; c++)
                        l += r[c] * Math.pow(128, a--);
                    n.push(l);
                    a = 0;
                    r = []
                }
            }
            return n.join(".")
        }
        return null
    }
    ;
    this.data = this.parse(e)
};
var RSA = {
    getPublicKey: function(e) {
        if (e.length < 50)
            return !1;
        if ("-----BEGIN PUBLIC KEY-----" != e.substr(0, 26))
            return !1;
        e = e.substr(26);
        if ("-----END PUBLIC KEY-----" != e.substr(e.length - 24))
            return !1;
        e = e.substr(0, e.length - 24);
        e = new ASN1Data(Base64.decode(e));
        if (e.error)
            return !1;
        e = e.data;
        if ("1.2.840.113549.1.1.1" == e[0][0][0])
            return new RSAPublicKey(e[0][1][0][0],e[0][1][0][1]);
        else
            return !1
    },
    encrypt: function(e, t) {
        if (!t)
            return !1;
        var n = t.modulus.bitLength() + 7 >> 3;
        e = this.pkcs1pad2(e, n);
        if (!e)
            return !1;
        e = e.modPowInt(t.encryptionExponent, t.modulus);
        if (!e)
            return !1;
        e = e.toString(16);
        for (; e.length < 2 * n; )
            e = "0" + e;
        return Base64.encode(Hex.decode(e))
    },
    decrypt: function(e) {
        var t = new BigInteger(e,16)
    },
    pkcs1pad2: function(e, t) {
        if (t < e.length + 11)
            return null;
        var n = [];
        var i = e.length - 1;
        for (; i >= 0 && t > 0; )
            n[--t] = e.charCodeAt(i--);
        n[--t] = 0;
        for (; t > 2; )
            n[--t] = Math.floor(254 * Math.random()) + 1;
        n[--t] = 2;
        n[--t] = 0;
        return new BigInteger(n)
    }
};
var MpUtil = function() {
    var e = 0;
    var t = function(e, t, n) {
        e.addEventListener ? e.addEventListener(t, n, !1) : e.attachEvent("on" + t, n)
    };
    var n = function(e, t, n) {
        e.removeEventListener ? e.removeEventListener(t, n, !1) : e.detachEvent("on" + t, n)
    };
    var i = function() {
        return "" + ++e
    };
    var r = function(e, t) {
        try {
            t = t.toLowerCase();
            if (null === e)
                return "null" == t;
            if (void 0 === e)
                return "undefined" == t;
            else
                return Object.prototype.toString.call(e).toLowerCase() == "[object " + t + "]"
        } catch (n) {
            return !1
        }
    };
    return {
        addEvent: t,
        clearEvent: n,
        uniqueId: i,
        isTypeOf: r
    }
}();
var MpRequest = function() {
    var e;
    var t = "zc.reg.163.com/resources/mp-agent-finger.html?WEBZJVersion=26494456d8e99723c52382d4c7ccf751";
    var n = "MP-DATA:";
    var i = "MP-COOKIE:";
    var r = "MP_AGENT_READY";
    var a = !1;
    var s = !1;
    var o = [];
    var c;
    var l = {};
    var u = {};
    var d, _, h, f, p, g, m, b, v;
    var y;
    var $ = 200 * Math.random();
    var w = function() {
        a = !0;
        var t = function(e) {
            var t = document.createElement("img");
            t.style.width = "0px";
            t.style.height = "0px";
            t.style.position = "absolute";
            document.body.appendChild(t);
            t.src = e;
            setTimeout(function() {
                document.body.removeChild(t)
            }, 1e4)
        };
        var d = function(e, n) {
            try {
                var i, r = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 24, 25, 20400, 20500];
                var a = "https://pr.nss.netease.com/sentry/passive?uapi=" + encodeURIComponent(e);
                var s = e.indexOf("dl-") > -1 ? 1 : 0;
                var o = window._$needUrsBgp && window._$BGPZC ? 1 : 0;
                var c = 0;
                if ($ <= 1) {
                    i = _(n);
                    a = a + "&dataTime=" + (new Date).getTime() + "&clusterName=urs-webzj-static-passive&modelName=webzj_response_time2&one=1&isLogin=" + s + "&isBGP=" + o + "&isNew=" + c;
                    for (var l = 0, u = r.length, d; l < u; l++) {
                        d = r[l];
                        if (d == i)
                            a = a + "&step" + d + "=1";
                        else
                            a = a + "&step" + d + "=0"
                    }
                    t(a)
                }
            } catch (h) {}
        };
        var _ = function(e) {
            var t = 1;
            if (e > 2e4)
                if (20400 == e || 20500 == e)
                    t = e;
                else if (e.toString().indexOf("4") > -1)
                    t = 24;
                else if (e.toString().indexOf("5") > -1)
                    t = 25;
                else
                    t = 10;
            else if (e > 1e4)
                t = 9;
            else if (e > 2e3)
                t = 8;
            else if (e > 1e3)
                t = 7;
            else if (e > 500)
                t = 6;
            else if (e > 200)
                t = 5;
            else if (e > 90)
                t = 4;
            else if (e > 60)
                t = 3;
            else if (e > 30)
                t = 2;
            return t
        };
        g = function(t) {
            var a = t.data, _;
            if (a !== r) {
                if ("object" == typeof a)
                    a = JSON.stringify(a);
                if (0 !== a.indexOf(i)) {
                    if (0 === a.indexOf(n)) {
                        a = JSON.parse(a.replace(n, ""));
                        _ = l[a.key];
                        delete l[a.key];
                        if (_)
                            if (0 !== ("" + a.status).indexOf("2")) {
                                var f = {
                                    ret: "" + a.status
                                };
                                if ("-1" == a.status)
                                    d(_.logPath, 10001);
                                else
                                    d(_.logPath, 2e4 + parseInt(a.status));
                                _ && _.error(f)
                            } else {
                                a.result = JSON.parse(decodeURIComponent(a.result || "{}"));
                                a.result.time = a.time;
                                d(_.logPath, a.time);
                                _ && _.success(a.result)
                            }
                    }
                } else {
                    a = JSON.parse(a.replace(i, ""));
                    _ = u[a.key];
                    delete u[a.key];
                    if (!_)
                        return;
                    _(a.cookieValue)
                }
            } else {
                s = !0;
                var p = (new Date).getTime() - y;
                var g = window._$needUrsBgp && window._$BGPZC ? "BGP" : "notBGP";
                d("zc-iframe-" + g, p);
                for (var m = 0, b = o.length; m < b; m++)
                    c(e.contentWindow, {
                        data: o[m]
                    });
                clearTimeout(h)
            }
        }
        ;
        if (!window.postMessage) {
            var m = "MSGREGISTER|"
                , b = [];
            var v = function() {
                var e = function(e) {
                    var t = {}
                        , n = e.split("|");
                    for (var i = 0, r = n.length, a; i < r; i++) {
                        a = n[i].split("=");
                        t[decodeURIComponent(a.shift())] = decodeURIComponent(a.join("="))
                    }
                    return t
                };
                return function() {
                    var t = unescape(window.name || "");
                    if (t && 0 == t.indexOf(m)) {
                        window.name = "";
                        t = t.replace(m, "");
                        var n = e(t)
                            , i = (n.origin || "").toLowerCase();
                        if (!i || "*" == i || 0 == location.href.toLowerCase().indexOf(i))
                            g({
                                data: JSON.parse(n.data || "null"),
                                origin: document.referrer
                            })
                    }
                }
            }();
            var w = function() {
                var e;
                var t = function(e, t) {
                    for (var n = 0, i = e.length; n < i; n++)
                        if (e[n] == t)
                            return !0;
                    return !1
                };
                return function() {
                    if (b.length) {
                        e = [];
                        for (var n = b.length - 1, i; n >= 0; n--) {
                            i = b[n];
                            if (!t(e, i.w)) {
                                e.push(i.w);
                                b.splice(n, 1);
                                i.w.name = i.d
                            }
                        }
                        e = null
                    }
                }
            }();
            c = function() {
                var e = function(e) {
                    var t = [];
                    for (var n in e)
                        t.push(encodeURIComponent(n) + "=" + encodeURIComponent(e[n]));
                    return t.join("|")
                };
                var t = function(t) {
                    var n = {};
                    t = t || {};
                    n.origin = t.origin || "*";
                    n.ref = location.href;
                    n.data = JSON.stringify(t.data);
                    return m + e(n)
                };
                return function(e, n) {
                    b.unshift({
                        w: e,
                        d: escape(t(n))
                    })
                }
            }();
            f = window.setInterval(w, 100);
            p = window.setInterval(v, 20)
        } else {
            c = function(e, t) {
                t = t || {};
                e.postMessage(JSON.stringify(t.data), t.origin || "*")
            }
            ;
            MpUtil.addEvent(window, "message", g)
        }
    };
    var C = function() {
        return function(e) {
            e = e || {};
            var t;
            t = document.createElement("iframe");
            t.frameBorder = 0;
            t.style.position = "absolute";
            t.style.width = 0;
            t.style.height = 0;
            t.id = "id-" + MpUtil.uniqueId();
            document.body.appendChild(t);
            var n = e.src;
            window.setTimeout(function() {
                t.src = n
            }, 0);
            return t
        }
    }();
    var x = function(e) {
        f = window.clearInterval(f);
        p = window.clearInterval(p);
        MpUtil.clearEvent(window, "message", g);
        m = 1;
        w({
            timeout: e.timeout
        })
    };
    var T = function() {
        var n = function(e) {
            return e.replace("dl.reg.163.com", "dl2.reg.163.com").replace("zc.reg.163.com", "zc2.reg.163.com").replace("passport.", "passport2.").replace("reg.icourse163.org", "reg2.icourse163.org")
        };
        var i = function(e) {
            var t = [];
            for (var n in e)
                t.push(encodeURIComponent(n) + "=" + encodeURIComponent(e[n]));
            return t.join("&")
        };
        return function(r, u) {
            var f;
            r = r || {};
            var p = MpUtil.uniqueId();
            if (!a) {
                d = p;
                h = setTimeout(function() {
                    l[d].error({
                        ret: "-2"
                    });
                    delete l[d]
                }, window._$bgpTime2);
                w({
                    timeout: r.timeout
                })
            }
            if (window._$needUrsBgp && window._$BGPZC && !m) {
                h = window.clearTimeout(h);
                _ = p;
                h = setTimeout(function() {
                    l[_].error({
                        ret: "-2"
                    });
                    delete l[_]
                }, window._$bgpTime2);
                x(r)
            }
            var g = r.url.indexOf("/yd/") >= 0 ? "yd-" + u : u;
            g = g.replace(/\//g, "");
            g = "zc-" + g;
            l[p] = {
                success: r.success,
                error: r.error,
                logPath: g
            };
            if (window._$needUrsBgp && window._$BGPZC && e && !b) {
                var $ = e.contentWindow;
                if (e) {
                    e.src = "about:blank";
                    try {
                        $.document.write("");
                        $.document.clear()
                    } catch (T) {}
                }
                document.body.removeChild(e);
                window.CollectGarbage && window.CollectGarbage();
                e = null;
                s = !1;
                b = 0;
                v = 1;
                for (var k = 0; k < o.length; k++) {
                    var E = o[k].url;
                    if (o[k].key != d)
                        o[k].url = n(E);
                    else
                        ;
                }
                for (var S = 0; S < o.length; S++)
                    if (o[S].key == d) {
                        o.shift();
                        break
                    }
            } else if ("/ini" == u || "/nini" == u)
                o = [];
            if ("get" === r.type.toLowerCase()) {
                var N = r.url;
                var L = N.indexOf("?") < 0 ? "?" : "&";
                r.data.nocache = p;
                var P = i(r.data);
                if (P)
                    N += L + P;
                r.url = N
            }
            var I = {};
            I.isInit = r.isInit || "";
            if (r.data)
                I.rtid = r.data.rtid || "";
            I.key = p;
            I.data = "get" === r.type.toLowerCase() ? null : r.data;
            I.headers = {};
            I.headers["Content-Type"] = r.contentType || "application/x-www-form-urlencoded";
            if ("application/x-www-form-urlencoded" == I.headers["Content-Type"]) {
                r.data = JSON.parse(r.data);
                I.data = i(r.data)
            }
            I.method = r.type;
            I.timeout = r.timeout || 1e4;
            I.url = r.url;
            if (!e) {
                if (window["$regCookieDomain"])
                    if (window["$regCookieDomain"].indexOf("icourse163.org") >= 0)
                        t = t.replace("zc.reg.163.com", "reg." + window["$regCookieDomain"] + "/zc");
                    else
                        t = t.replace("zc.reg.163.com", window["$cookieDomainPrefix"] + "passport." + window["$regCookieDomain"] + "/zc");
                t = t + "&pkid=" + window._$PKID + "&product=" + window._$PRODUCT + "&mpfrom=" + encodeURIComponent(window._$TOPURL);
                f = window.REGPROTOCOL + t;
                if (window._$needUrsBgp && window._$BGPZC) {
                    b = 1;
                    f = n(f)
                }
                y = (new Date).getTime();
                e = C({
                    src: f
                })
            }
            if (!s)
                if (v && o.length > 0)
                    v = 0;
                else
                    o.push(I);
            else
                c(e.contentWindow, {
                    data: I
                });
            return p
        }
    }();
    var k = function() {
        return function(t, n) {
            var i = MpUtil.uniqueId();
            u[i] = n;
            var r = {
                key: i,
                cookieKey: t
            };
            c(e.contentWindow, {
                data: r
            })
        }
    }();
    var E = function(t) {
        for (var n = 0; n < t.length; n++) {
            var i = t[n];
            S(i);
            if (l[i])
                delete l[i]
        }
        var r = {
            clearAjaxArr: t
        };
        c(e.contentWindow, {
            data: r
        })
    };
    var S = function(e) {
        for (var t = 0; t < o.length; t++) {
            var n = o[t];
            if (n.key === e) {
                o.splice(t, 1);
                break
            }
        }
    };
    return {
        request: T,
        getCookie: k,
        reset: x,
        clearAjaxByKey: E
    }
}();
var MpRequest2 = function() {
    var e;
    var t = "dl.reg.163.com/src/mp-agent-finger.html?WEBZJVersion=f7078e2e3bd5d59a0be760a1c4d74d72";
    var n = "MP2-DATA:";
    var i = "MP2-COOKIE:";
    var r = "MP2_AGENT_READY";
    var a = !1;
    var s = !1;
    var o = [];
    var c;
    var l = {};
    var u = {};
    var d, _, h, f, p, g, m, b, v;
    var y;
    var $ = function(e) {
        if ((e.indexOf("dl2.reg.163.com") > -1 || e.indexOf("dl.reg.163.com") > -1) && e.indexOf("/dl/") < 0)
            if (e.indexOf("/b/") > -1)
                e = e.replace(/:\/\/[^\/]+\/b\//, function(e) {
                    return e + "dl/"
                });
            else
                e = e.replace(/:\/\/[^\/]+\//, function(e) {
                    return e + "dl/"
                });
        return e
    };
    var w = function(e) {
        return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(e).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null
    };
    var C = 200 * Math.random();
    var x = function() {
        a = !0;
        var t = function(e) {
            var t = document.createElement("img");
            t.style.width = "0px";
            t.style.height = "0px";
            t.style.position = "absolute";
            document.body.appendChild(t);
            t.src = e;
            setTimeout(function() {
                document.body.removeChild(t)
            }, 1e4)
        };
        var d = function(e, n) {
            try {
                var i, r = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 24, 25, 20400, 20500];
                var a = "https://pr.nss.netease.com/sentry/passive?uapi=" + encodeURIComponent(e);
                var s = e.indexOf("dl-") > -1 ? 1 : 0;
                var o = window._$needUrsBgp && window._$BGP ? 1 : 0;
                var c = 0;
                if (C <= 1) {
                    i = _(n);
                    a = a + "&dataTime=" + (new Date).getTime() + "&clusterName=urs-webzj-static-passive&modelName=webzj_response_time2&one=1&isLogin=" + s + "&isBGP=" + o + "&isNew=" + c;
                    for (var l = 0, u = r.length, d; l < u; l++) {
                        d = r[l];
                        if (d == i)
                            a = a + "&step" + d + "=1";
                        else
                            a = a + "&step" + d + "=0"
                    }
                    t(a)
                }
            } catch (h) {}
        };
        var _ = function(e) {
            var t = 1;
            if (e > 2e4)
                if (20400 == e || 20500 == e)
                    t = e;
                else if (e.toString().indexOf("4") > -1)
                    t = 24;
                else if (e.toString().indexOf("5") > -1)
                    t = 25;
                else
                    t = 10;
            else if (e > 1e4)
                t = 9;
            else if (e > 2e3)
                t = 8;
            else if (e > 1e3)
                t = 7;
            else if (e > 500)
                t = 6;
            else if (e > 200)
                t = 5;
            else if (e > 90)
                t = 4;
            else if (e > 60)
                t = 3;
            else if (e > 30)
                t = 2;
            return t
        };
        g = function(t) {
            var a = t.data, _;
            if (a !== r) {
                if ("object" == typeof a)
                    a = JSON.stringify(a);
                if (0 !== a.indexOf(i)) {
                    if (0 === a.indexOf(n)) {
                        a = JSON.parse(a.replace(n, ""));
                        _ = l[a.key];
                        delete l[a.key];
                        if (_)
                            if (0 !== ("" + a.status).indexOf("2")) {
                                var f = {
                                    ret: "" + a.status
                                };
                                if ("-1" == a.status)
                                    d(_.logPath, 10001);
                                else
                                    d(_.logPath, 2e4 + parseInt(a.status));
                                _ && _.error(f)
                            } else {
                                a.result = JSON.parse(decodeURIComponent(a.result || "{}"));
                                a.result.time = a.time;
                                d(_.logPath, a.time);
                                _ && _.success(a.result)
                            }
                    }
                } else {
                    a = JSON.parse(a.replace(i, ""));
                    _ = u[a.key];
                    delete u[a.key];
                    if (!_)
                        return;
                    _(a.cookieValue)
                }
            } else {
                s = !0;
                var p = (new Date).getTime() - y;
                var g = window._$needUrsBgp && window._$BGP ? "BGP" : "notBGP";
                d("dl-iframe-" + g, p);
                for (var m = 0, b = o.length; m < b; m++)
                    c(e.contentWindow, {
                        data: o[m]
                    });
                clearTimeout(h)
            }
        }
        ;
        if (!window.postMessage) {
            var m = "MSGLOGIN|"
                , b = [];
            var v = function() {
                var e = function(e) {
                    var t = {}
                        , n = e.split("|");
                    for (var i = 0, r = n.length, a; i < r; i++) {
                        a = n[i].split("=");
                        t[decodeURIComponent(a.shift())] = decodeURIComponent(a.join("="))
                    }
                    return t
                };
                return function() {
                    var t = unescape(window.name || "");
                    if (t && 0 == t.indexOf(m)) {
                        window.name = "";
                        t = t.replace(m, "");
                        var n = e(t)
                            , i = (n.origin || "").toLowerCase();
                        if (!i || "*" == i || 0 == location.href.toLowerCase().indexOf(i))
                            g({
                                data: JSON.parse(n.data || "null"),
                                origin: document.referrer
                            })
                    }
                }
            }();
            var $ = function() {
                var e;
                var t = function(e, t) {
                    for (var n = 0, i = e.length; n < i; n++)
                        if (e[n] == t)
                            return !0;
                    return !1
                };
                return function() {
                    if (b.length) {
                        e = [];
                        for (var n = b.length - 1, i; n >= 0; n--) {
                            i = b[n];
                            if (!t(e, i.w)) {
                                e.push(i.w);
                                b.splice(n, 1);
                                i.w.name = i.d
                            }
                        }
                        e = null
                    }
                }
            }();
            c = function() {
                var e = function(e) {
                    var t = [];
                    for (var n in e)
                        t.push(encodeURIComponent(n) + "=" + encodeURIComponent(e[n]));
                    return t.join("|")
                };
                var t = function(t) {
                    var n = {};
                    t = t || {};
                    n.origin = t.origin || "*";
                    n.ref = location.href;
                    n.data = JSON.stringify(t.data);
                    return m + e(n)
                };
                return function(e, n) {
                    b.unshift({
                        w: e,
                        d: escape(t(n))
                    })
                }
            }();
            f = window.setInterval($, 100);
            p = window.setInterval(v, 20)
        } else {
            c = function(e, t) {
                t = t || {};
                e.postMessage(JSON.stringify(t.data), t.origin || "*")
            }
            ;
            MpUtil.addEvent(window, "message", g)
        }
    };
    var T = function() {
        return function(e) {
            e = e || {};
            var t;
            t = document.createElement("iframe");
            t.frameBorder = 0;
            t.style.position = "absolute";
            t.style.width = 0;
            t.style.height = 0;
            t.id = "id-" + MpUtil.uniqueId();
            document.body.appendChild(t);
            var n = e.src;
            window.setTimeout(function() {
                t.src = n
            }, 0);
            return t
        }
    }();
    var k = function(e) {
        f = window.clearInterval(f);
        p = window.clearInterval(p);
        MpUtil.clearEvent(window, "message", g);
        m = 1;
        x({
            timeout: e.timeout
        })
    };
    var E = function() {
        var n = function(e) {
            return e.replace("dl.reg.163.com", "dl2.reg.163.com").replace("zc.reg.163.com", "zc2.reg.163.com").replace("passport.", "passport2.").replace("reg.icourse163.org", "reg2.icourse163.org")
        };
        var i = function(e) {
            var t = [];
            for (var n in e)
                t.push(encodeURIComponent(n) + "=" + encodeURIComponent(e[n]));
            return t.join("&")
        };
        return function(r, u) {
            var f;
            r = r || {};
            var p = MpUtil.uniqueId();
            if (!a) {
                d = p;
                h = setTimeout(function() {
                    l[d].error({
                        ret: "-2"
                    });
                    delete l[d]
                }, window._$bgpTime2);
                x({
                    timeout: r.timeout
                })
            }
            if (window._$needUrsBgp && window._$BGP && !m) {
                h = window.clearTimeout(h);
                _ = p;
                h = setTimeout(function() {
                    l[_].error({
                        ret: "-2"
                    });
                    delete l[_]
                }, window._$bgpTime2);
                k(r)
            }
            var g = r.url.indexOf("/yd/") >= 0 ? "yd-" + u : u;
            g = g.replace(/\//g, "");
            g = "dl-" + g;
            l[p] = {
                success: r.success,
                error: r.error,
                logPath: g
            };
            if (window._$needUrsBgp && window._$BGP && e && !b) {
                var C = e.contentWindow;
                if (e) {
                    e.src = "about:blank";
                    try {
                        C.document.write("");
                        C.document.clear()
                    } catch (E) {}
                }
                document.body.removeChild(e);
                window.CollectGarbage && window.CollectGarbage();
                e = null;
                s = !1;
                b = 0;
                v = 1;
                for (var S = 0; S < o.length; S++) {
                    var N = o[S].url;
                    if (o[S].key != d)
                        o[S].url = n(N);
                    else
                        ;
                }
                for (var L = 0; L < o.length; L++)
                    if (o[L].key == d) {
                        o.shift();
                        break
                    }
            } else if ("/ini" == u || "/nini" == u)
                o = [];
            if ("get" === r.type.toLowerCase()) {
                var P = r.url;
                var I = P.indexOf("?") < 0 ? "?" : "&";
                r.data.nocache = p;
                var M = i(r.data);
                if (M)
                    P += I + M;
                r.url = P
            }
            var O = {};
            O.isInit = r.isInit || "";
            if (r.data)
                O.rtid = r.data.rtid || "";
            O.key = p;
            O.data = "get" === r.type.toLowerCase() ? null : r.data;
            O.headers = {};
            O.headers["Content-Type"] = r.contentType || "application/x-www-form-urlencoded";
            if ("application/x-www-form-urlencoded" == O.headers["Content-Type"]) {
                r.data = JSON.parse(r.data);
                O.data = i(r.data)
            }
            O.method = r.type;
            O.timeout = r.timeout || 1e4;
            O.url = r.url;
            O.ydSignCookie = w("l_yd_sign");
            if (!e) {
                if (window["$cookieDomain"])
                    if (window["$cookieDomain"].indexOf("icourse163.org") >= 0)
                        t = t.replace("dl.reg.163.com", "reg." + window["$cookieDomain"] + "/dl");
                    else
                        t = t.replace("dl.reg.163.com", window["$cookieDomainPrefix"] + "passport." + window["$cookieDomain"] + "/dl");
                t = t + "&pkid=" + window._$PKID + "&product=" + window._$PRODUCT + "&mpfrom=" + encodeURIComponent(window._$TOPURL);
                f = window.PROTOCOL + t;
                if (window._$needUrsBgp && window._$BGP) {
                    b = 1;
                    f = n(f)
                }
                if (window._$pathB)
                    f = f.replace(/:\/\/(?:[^\/]+)/, function(e) {
                        return e + "/b"
                    });
                y = (new Date).getTime();
                f = $(f);
                e = T({
                    src: f
                })
            }
            if (!s)
                if (v && o.length > 0)
                    v = 0;
                else
                    o.push(O);
            else
                c(e.contentWindow, {
                    data: O
                });
            return p
        }
    }();
    var S = function() {
        return function(t, n) {
            var i = MpUtil.uniqueId();
            u[i] = n;
            var r = {
                key: i,
                cookieKey: t
            };
            c(e.contentWindow, {
                data: r
            })
        }
    }();
    var N = function(t) {
        for (var n = 0; n < t.length; n++) {
            var i = t[n];
            L(i);
            if (l[i])
                delete l[i]
        }
        var r = {
            clearAjaxArr: t
        };
        c(e.contentWindow, {
            data: r
        })
    };
    var L = function(e) {
        for (var t = 0; t < o.length; t++) {
            var n = o[t];
            if (n.key === e) {
                o.splice(t, 1);
                break
            }
        }
    };
    return {
        request: E,
        getCookie: S,
        reset: k,
        clearAjaxByKey: N
    }
}();
var MP = function() {
    var e = "zc.reg.163.com"
        , t = "ntes_zc_"
        , n = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5gsH+AA4XWONB5TDcUd+xCz7ejOFHZKlcZDx+pF1i7Gsvi1vjyJoQhRtRSn950x498VUkx7rUxg1/ScBVfrRxQOZ8xFBye3pjAzfb22+RCuYApSVpJ3OO3KsEuKExftz9oFBv3ejxPlYc5yq7YiBO8XlTnQN0Sa4R4qhPO3I2MQIDAQAB-----END PUBLIC KEY-----"
        , i = "dl.reg.163.com";
    if (window._$needUrsBgp && window._$BGP)
        i = "dl2.reg.163.com";
    var r = function(e) {
        var t = "&";
        if (e.indexOf("?") == -1) {
            e += "?";
            t = ""
        }
        e = e + t + "rtid=" + window._$RTID;
        return e
    };
    var a = function() {
        var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
            , t = 32
            , n = [];
        for (; t-- > 0; )
            n[t] = e.charAt(Math.random() * e.length);
        return n.join("")
    };
    var s = function(e) {
        var t = "&";
        if (e.indexOf("?") == -1) {
            e += "?";
            t = ""
        }
        e = e + t + "topURL=" + encodeURIComponent(window._$TOPURL);
        return e
    };
    var o = function(e) {
        var t = "&";
        if (e.indexOf("?") === -1) {
            e += "?";
            t = ""
        }
        e = e + t + "pd=" + window._$URSOPT.product + "&pkid=" + window._$URSOPT.promark;
        return e
    };
    var c = function(e) {
        return e.replace("dl.reg.163.com", "dl2.reg.163.com").replace("zc.reg.163.com", "zc2.reg.163.com").replace("passport.", "passport2.").replace("reg.icourse163.org", "reg2.icourse163.org")
    };
    var l = function(e) {
        var t = "&";
        if (e.indexOf("?") == -1) {
            e += "?";
            t = ""
        }
        if (window._$URSOPT.opd)
            e = e + t + "opd=" + window._$URSOPT.opd;
        if (window._$URSOPT.opkid)
            e = e + "&opkid=" + window._$URSOPT.opkid;
        return e
    };
    var u = function(e) {
        if ((e.indexOf("dl2.reg.163.com") > -1 || e.indexOf("dl.reg.163.com") > -1) && e.indexOf("/dl/") < 0)
            if (e.indexOf("/b/") > -1)
                e = e.replace(/:\/\/[^\/]+\/b\//, function(e) {
                    return e + "dl/"
                });
            else
                e = e.replace(/:\/\/[^\/]+\//, function(e) {
                    return e + "dl/"
                });
        return e
    };
    var d = function(e) {
        if (window._$pathB)
            e = e.replace(/:\/\/(?:[^\/]+)/, function(e) {
                return e + "/b"
            });
        return e
    }
        , _ = function(t) {
        var n = t.data
            , i = (t.host ? t.host : e) + t.path;
        var r = t.isLogin;
        var s = t.isInit || "";
        if (r) {
            if (window._$needUrsBgp && window._$BGP)
                i = c(i)
        } else if (window._$needUrsBgp && window._$BGPZC)
            i = c(i);
        if ("string" == typeof n)
            n = JSON.parse(n);
        if (s)
            window._$RTID = a();
        n.rtid = window._$RTID;
        delete n.isleak;
        h(n);
        if (!r)
            i = window.REGPROTOCOL + i;
        else
            i = window.PROTOCOL + i;
        var o = 1e4;
        if (r) {
            if (window._$URSOPT.opd)
                n.opd = window._$URSOPT.opd;
            if (window._$URSOPT.opkid)
                n.opkid = window._$URSOPT.opkid;
            i = d(i)
        }
        if ("POST" == t.type)
            n = JSON.stringify(n);
        i = u(i);
        var l = r ? {
            isInit: s,
            url: i,
            type: t.type,
            data: n,
            contentType: t.contentType || "application/json",
            dataType: t.dataType || "json",
            timeout: o,
            success: function(e) {
                var n = e && e.ret;
                if (201 != n)
                    t.error(t.path, e);
                else
                    t.success(t.path, e)
            },
            error: function() {
                var e = Array.prototype.slice.call(arguments);
                e.unshift(t.path);
                t.error.apply(null, e)
            }
        } : {
            isInit: s,
            url: i,
            type: t.type,
            data: n,
            contentType: t.contentType || "application/json",
            dataType: t.dataType || "json",
            timeout: o,
            success: function(e) {
                if (e && e.ret && ("102" === e.ret || "104" === e.ret || "200" === e.ret || "201" === e.ret || "202" === e.ret))
                    t.success(t.path, e);
                else
                    t.error(t.path, e)
            },
            error: function() {
                var e = Array.prototype.slice.call(arguments);
                e.unshift(t.path);
                t.error.apply(null, e)
            }
        };
        if (r)
            return MpRequest2.request(l, t.path);
        else
            return MpRequest.request(l, t.path)
    };
    var h = function(e) {
        try {
            e.topURL = window._$TOPURL
        } catch (t) {
            return
        }
    };
    return {
        TICKET: "",
        encrypt: function(e, t) {
            var i = RSA.getPublicKey(n);
            return RSA.encrypt(e + "`" + t, i)
        },
        encrypt2: function(e) {
            var t = RSA.getPublicKey(n);
            return RSA.encrypt(e, t)
        },
        getCookieId: function(e, t) {
            MpRequest2.getCookie(e, t)
        },
        getId: function(e, n) {
            MpRequest.getCookie(t + e, n)
        },
        regvftcp: function(e, t, n, i) {
            _({
                path: "/vftcp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        regvfscp: function(e, t, n, i) {
            _({
                path: "/vfscp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        regvfccp: function(e, t, n, i) {
            _({
                path: "/vfccp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        init: function(e, t, n, i) {
            _({
                path: "/ini",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0,
                isInit: 1
            })
        },
        vfsmsup: function(e, t, n, i) {
            return _({
                path: "/vfsmsup",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        getCaptcha: function() {
            var t = e
                , n = window["$regCookieDomain"];
            if (n)
                if (n.indexOf("icourse163.org") >= 0)
                    t = "reg." + n + "/zc";
                else
                    t = window["$cookieDomainPrefix"] + "passport." + n + "/zc";
            if (window._$needUrsBgp && window._$BGPZC)
                t = c(t);
            var i = window.REGPROTOCOL + t + "/cp?channel=2&nocache=" + window.MpUtil.uniqueId();
            i = r(i);
            i = s(i);
            i = o(i);
            return i
        },
        checkCaptcha: function(e, t, n, i) {
            _({
                path: "/vfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        checkName: function(e, t, n, i) {
            _({
                path: "/chn",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        getMailSms: function(e, t, n, i) {
            _({
                path: "/mlrgsm",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        getTicket: function(e, t, n, i) {
            _({
                path: "/gt",
                type: "POST",
                contentType: "application/json",
                data: JSON.stringify(e),
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        setTicket: function(e) {
            MP.TICKET = e || ""
        },
        regMob: function(e, t, n, i) {
            _({
                path: "/mrg",
                type: "POST",
                contentType: "application/json",
                data: JSON.stringify(e),
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        fastReg: function(e, t, n, i) {
            _({
                path: "/frg",
                type: "POST",
                contentType: "application/json",
                data: JSON.stringify(e),
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        sendActMail: function(e, t, n, i) {
            _({
                path: "/sendActMail",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        qrlogin: function(e, t, n, i) {
            _({
                path: "/qrcodel",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        getCaptchaLogin: function(e, t, n) {
            var a = i;
            if (n)
                if (n.indexOf("icourse163.org") >= 0)
                    a = "reg." + n + "/dl";
                else
                    a = window["$cookieDomainPrefix"] + "passport." + n + "/dl";
            if (window._$needUrsBgp && window._$BGP)
                a = c(a);
            var _ = window.PROTOCOL + a + "/cp?random=" + window.MpUtil.uniqueId();
            _ = d(_);
            _ = l(_);
            _ = r(_);
            _ = s(_);
            _ = u(_);
            _ = o(_);
            return _
        },
        safelogin: function(e, t, n, i) {
            _({
                path: "/l",
                type: "POST",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        llp: function(e, t, n, i) {
            _({
                path: "/llp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        sendSmsLogin: function(e, t, n, i) {
            _({
                path: "/sm",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        initComponentLogin: function(e, t, n, i) {
            _({
                path: "/ini",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1,
                isInit: 1
            })
        },
        checkSmsCode: function(e, t, n, i) {
            _({
                path: "/vfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vfsms: function(e, t, n, i) {
            return _({
                path: "/vfsms",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        getLoginTicket: function(e, t, n, i) {
            _({
                path: "/gt",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vftcp: function(e, t, n, i) {
            _({
                path: "/vftcp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vfscp: function(e, t, n, i) {
            _({
                path: "/vfscp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vfccp: function(e, t, n, i) {
            _({
                path: "/vfccp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        getPP: function(e, t, n, i) {
            _({
                path: "/pp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vfppc: function(e, t, n, i) {
            _({
                path: "/vfppc",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vfotp: function(e, t, n, i) {
            _({
                path: "/vfotp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        mbsm: function(e, t, n, i) {
            _({
                path: "/mbsm",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        vfmbsms: function(e, t, n, i) {
            return _({
                path: "/vfmbsms",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        goonlog: function(e, t, n, i) {
            _({
                path: "/go",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-qrlogin": function(e, t, n, i) {
            _({
                path: "/qrcodel",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-login": function(e, t, n, i) {
            _({
                path: "/lpwd",
                type: "POST",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-gt": function(e, t, n, i) {
            return _({
                path: "/gt",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-ini": function(e, t, n, i) {
            _({
                path: "/ini",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1,
                isInit: 1
            })
        },
        "mb-vfcp": function(e, t, n, i) {
            _({
                path: "/vfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-cp": function(e, t, n) {
            var a = i;
            if (n)
                if (n.indexOf("icourse163.org") >= 0)
                    a = "reg." + n + "/dl";
                else
                    a = window["$cookieDomainPrefix"] + "passport." + n + "/dl";
            if (window._$needUrsBgp && window._$BGP)
                a = c(a);
            var _ = window.PROTOCOL + a + "/yd/cp?random=" + window.MpUtil.uniqueId();
            _ = d(_);
            _ = l(_);
            _ = r(_);
            _ = s(_);
            _ = u(_);
            _ = o(_);
            return _
        },
        "mb-lvfsms": function(e, t, n, i) {
            return _({
                path: "/lvfsms",
                type: "POST",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-vftcp": function(e, t, n, i) {
            _({
                path: "/vftcp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-vfccp": function(e, t, n, i) {
            _({
                path: "/vfccp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-sms-lsm": function(e, t, n, i) {
            _({
                path: "/lsm",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-reg-ini": function(e, t, n, i) {
            _({
                path: "/ini",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0,
                isInit: 1
            })
        },
        "mb-reg-cp": function() {
            var t = window["$regCookieDomain"];
            var n = e;
            if (t)
                if (t.indexOf("icourse163.org") >= 0)
                    n = "reg." + t + "/zc";
                else
                    n = window["$cookieDomainPrefix"] + "passport." + t + "/zc";
            if (window._$needUrsBgp && window._$BGPZC)
                n = c(n);
            var i = window.REGPROTOCOL + n + "/yd/cp?channel=3&nocache=" + window.MpUtil.uniqueId();
            i = r(i);
            i = s(i);
            i = o(i);
            return i
        },
        "mb-reg-sm": function(e, t, n, i) {
            _({
                path: "/sm",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        "mb-reg-vfsms": function(e, t, n, i) {
            return _({
                path: "/vfsms",
                type: "POST",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 0
            })
        },
        "mb-nini": function(e, t, n, i) {
            _({
                path: "/nini",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1,
                isInit: 1
            })
        },
        "mb-nlregssms": function(e, t, n, i) {
            _({
                path: "/nlregssms",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-nlgt": function(e, t, n, i) {
            return _({
                path: "/nlgt",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-nlregvfsms": function(e, t, n, i) {
            return _({
                path: "/nlregvfsms",
                type: "POST",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-ncp": function(e, t) {
            var n = i;
            if (t)
                if (t.indexOf("icourse163.org") >= 0)
                    n = "reg." + t + "/dl";
                else
                    n = window["$cookieDomainPrefix"] + "passport." + t + "/dl";
            if (window._$needUrsBgp && window._$BGP)
                n = c(n);
            var a = window.PROTOCOL + n + "/yd/ncp?pd=" + e.product + "&pkid=" + e.pkid + "&pkht=" + e.pkht + "&channel=" + e.channel + "&random=" + window.MpUtil.uniqueId();
            a = d(a);
            a = l(a);
            a = r(a);
            a = s(a);
            a = u(a);
            return a
        },
        "mb-nvfcp": function(e, t, n, i) {
            _({
                path: "/nvfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-nvftcp": function(e, t, n, i) {
            _({
                path: "/nvftcp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        },
        "mb-nvfccp": function(e, t, n, i) {
            _({
                path: "/nvfccp",
                type: "GET",
                data: e,
                success: t,
                error: n,
                host: i,
                isLogin: 1
            })
        }
    }
}();

!function(e, t, n, i, r, a, s, o, c, l, u, d) {
    var _;
    var h = "ntes_zc_"
        , f = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5gsH+AA4XWONB5TDcUd+xCz7ejOFHZKlcZDx+pF1i7Gsvi1vjyJoQhRtRSn950x498VUkx7rUxg1/ScBVfrRxQOZ8xFBye3pjAzfb22+RCuYApSVpJ3OO3KsEuKExftz9oFBv3ejxPlYc5yq7YiBO8XlTnQN0Sa4R4qhPO3I2MQIDAQAB-----END PUBLIC KEY-----";
    var p = {
        "/l": {
            name: "/l",
            201: {
                ret: "201",
                message: "登录成功"
            },
            401: {
                ret: "401",
                message: "参数错误"
            },
            402: {
                ret: "402",
                message: "指纹错误"
            },
            423: {
                ret: "423",
                message: "风控账号"
            }
        },
        "/lpwd": {
            name: "/lpwd",
            201: {
                ret: "201",
                message: "登录成功"
            }
        },
        "/lvfsms": {
            name: "/lvfsms",
            201: {
                ret: "201",
                message: "登录成功"
            }
        }
    };
    var g = 'https:' + "//";
    var m = [];
    var b = {
        init: {
            path: "/zj/mail/ini",
            type: "POST",
            isLogin: 0,
            isInit: 1,
            channel: 2
        },
        getPowerMailReg: {
            path: "/zj/mail/ini/powGetP",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        checkName: {
            path: "/zj/mail/chn",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        checkCaptcha: {
            path: "/zj/mail/vfcp",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        regvftcp: {
            path: "/zj/mail/vftcp",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        regvfccp: {
            path: "/zj/mail/vfccp",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        regvfscp: {
            path: "/zj/mail/vfscp",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        getTicket: {
            path: "/zj/mail/gt",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        fastReg: {
            path: "/zj/mail/frg",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        getMailSms: {
            path: "/zj/mail/sm",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        vfsmsup: {
            path: "/zj/mail/vfsmsup",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        sendActMail: {
            path: "/zj/mail/sendActMail",
            type: "POST",
            isLogin: 0,
            channel: 2
        },
        initComponentLogin: {
            path: "/zj/mail/ini",
            type: "POST",
            isLogin: 1,
            isInit: 1,
            channel: 0
        },
        getPowerMailLogin: {
            path: "/zj/mail/powGetP",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        checkSmsCode: {
            path: "/zj/mail/vfcp",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        vftcp: {
            path: "/zj/mail/vftcp",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        vfccp: {
            path: "/zj/mail/vfccp",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        vfscp: {
            path: "/zj/mail/vfscp",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        getLoginTicket: {
            path: "/zj/mail/gt",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        safelogin: {
            path: "/zj/mail/l",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        llp: {
            path: "/zj/mail/llp",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        goonlog: {
            path: "/zj/mail/go",
            type: "POST",
            isLogin: 1,
            channel: 0
        },
        qrlogin: {
            path: "/zj/mail/qrcodel",
            type: "POST",
            isLogin: 1,
            channel: 3
        },
        "mb-ini": {
            path: "/zj/yd/ini",
            type: "POST",
            isLogin: 1,
            isInit: 1,
            channel: 1
        },
        "mb-login-getPower": {
            path: "/zj/yd/powGetP",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-vfcp": {
            path: "/zj/yd/vfcp",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-vftcp": {
            path: "/zj/yd/vftcp",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-vfccp": {
            path: "/zj/yd/vfccp",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-vfscp": {
            path: "/zj/yd/vfscp",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-gt": {
            path: "/zj/yd/gt",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-login": {
            path: "/zj/yd/pwd/l",
            type: "POST",
            isLogin: 1,
            channel: 1
        },
        "mb-sms-lsm": {
            path: "/zj/yd/sms/sm",
            type: "POST",
            isLogin: 1,
            channel: 2
        },
        "mb-lvfsms": {
            path: "/zj/yd/sms/vfsms",
            type: "POST",
            isLogin: 1,
            channel: 2
        },
        "mb-qrlogin": {
            path: "/zj/yd/qrcodel",
            type: "POST",
            isLogin: 1,
            channel: 4
        },
        "mb-reg-ini": {
            path: "/zj/yd/ini",
            type: "POST",
            isLogin: 0,
            isInit: 1,
            channel: 3
        },
        "mb-reg-getPower": {
            path: "/zj/yd/powGetP",
            type: "POST",
            isLogin: 0,
            channel: 3
        },
        "mb-reg-sm": {
            path: "/zj/yd/sm",
            type: "POST",
            isLogin: 0,
            channel: 3
        },
        "mb-reg-vfsms": {
            path: "/zj/yd/vfsms",
            type: "POST",
            isLogin: 0,
            channel: 3
        },
        "mb-nini": {
            path: "/dlzc/yd/ini",
            type: "POST",
            isLogin: 1,
            isInit: 1,
            channel: 14
        },
        "mb-dlzc-powGetP": {
            path: "/dlzc/yd/powGetP",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nvfcp": {
            path: "/dlzc/yd/vfcp",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nvftcp": {
            path: "/dlzc/yd/vftcp",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nvfccp": {
            path: "/dlzc/yd/vfccp",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nvfscp": {
            path: "/dlzc/yd/vfscp",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nlgt": {
            path: "/dlzc/yd/gt",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nlregssms": {
            path: "/dlzc/yd/sms/sm",
            type: "POST",
            isLogin: 1,
            channel: 14
        },
        "mb-nlregvfsms": {
            path: "/dlzc/yd/sms/vfsms",
            type: "POST",
            isLogin: 1,
            channel: 14
        }
    };
    c = {}
    c._$init = function() {
        window.MP = {
            setTicket: function(e) {
                window.MP.TICKET = e || ""
            },
            encrypt: function(e, t) {
                t = t.toLowerCase();
                var n = RSA.getPublicKey(f);
                return RSA.encrypt(e + "`" + t, n)
            },
            encrypt2: function(e) {
                var t = RSA.getPublicKey(f);
                return RSA.encrypt(e, t)
            },
            getCookieId: function(e, t) {
                var n = a._$cookie(e);
                t(n)
            },
            getId: function(e, t) {
                var n = a._$cookie(h + e);
                t(n)
            }
        }
    }
    ;
    c._$request = function() {
        var e = function(e, t) {
            var n;
            var i = location.host + "/dl";
            var a = location.host + "/zc";
            if (e.indexOf("mb-") > -1 && (!r._$getSmState() || !b[e])) {
                i += "/yd";
                a += "/yd"
            }
            n = t ? i : a;
            return n
        };
        return function(t, n, i, r, a) {
            if (!this.__run) {
                this._$init();
                this.__run = 1
            }
            var s = e(t, a);
            return this.__createDataAndSend(t, n, s, i, r)
        }
    }();
    c._addRtid = function(e) {
        r._$addUtid();
        var t = "&";
        if (e.indexOf("?") == -1) {
            e += "?";
            t = ""
        }
        window._$RTID = r.getRtid();
        e = e + t + "rtid=" + window._$RTID;
        return e
    }
    ;
    c._addTopURL = function(e) {
        var t = "&";
        if (e.indexOf("?") == -1) {
            e += "?";
            t = ""
        }
        e = e + t + "topURL=" + encodeURIComponent(window._$TOPURL);
        return e
    }
    ;
    c._addPathB = function(e) {
        if (window._$pathB)
            e = e.replace(/:\/\/(?:[^\/]+)/, function(e) {
                return e + "/b"
            });
        return e
    }
    ;
    c._addOpdAndOpkid = function(e) {
        if (!window._$URSOPT.opd && !window._$URSOPT.opkid)
            return e;
        var t = "&";
        if (e.indexOf("?") == -1) {
            e += "?";
            t = ""
        }
        if (window._$URSOPT.opd)
            e = e + t + "opd=" + window._$URSOPT.opd;
        if (window._$URSOPT.opkid)
            e = e + "&opkid=" + window._$URSOPT.opkid;
        return e
    }
    ;
    c._getHost = function(e) {
        var t = location.host + e;
        return t
    }
    ;
    c._addParams = function(e) {
        e = this._addPathB(e);
        e = this._addOpdAndOpkid(e);
        e = this._addRtid(e);
        e = this._addTopURL(e);
        return e
    }
    ;
    c._addParamsForRegCap = function(e) {
        r._$addUtid();
        var t = {
            channel: e,
            rtid: r.getRtid(),
            pd: window._$URSOPT.product,
            pkid: window._$URSOPT.promark
        };
        return t
    }
    ;
    c._addParamsForLoginCap = function(e, t) {
        r._$addUtid();
        var n = {
            channel: e,
            rtid: r.getRtid(),
            pd: window._$URSOPT.product,
            pkid: window._$URSOPT.promark
        };
        if (1 === t)
            n.pkht = window._$URSOPT.host;
        if (window._$URSOPT.opd)
            n.opd = window._$URSOPT.opd;
        if (window._$URSOPT.opkid)
            n.opkid = window._$URSOPT.opkid;
        return n
    }
    ;
    c["getCaptchaSm"] = function() {
        var e = this._getHost("/zc/zj/mail");
        var t = this._addParamsForRegCap(2);
        t = r._$sm4Encrypt(t);
        var n = g + e + "/cp?encParams=" + t + "&nocache=" + (new Date).getTime();
        return n
    }
    ;
    c["getCaptcha"] = function() {
        if (r._$getSmState())
            return c["getCaptchaSm"]();
        var e = this._getHost("/zc");
        var t = g + e + "/cp?channel=2&nocache=" + (new Date).getTime();
        t = this._addRtid(t);
        t = this._addTopURL(t);
        t = r._$addPdAndPkid(t);
        return t
    }
    ;
    c["getCaptchaLoginSm"] = function() {
        var e = window._$pathB ? "/b/dl/zj/mail" : "/dl/zj/mail";
        var t = this._getHost(e);
        var n = this._addParamsForLoginCap(0);
        n = r._$sm4Encrypt(n);
        var i = g + t + "/cp?encParams=" + n + "&nocache=" + (new Date).getTime();
        return i
    }
    ;
    c["getCaptchaLogin"] = function() {
        if (r._$getSmState())
            return c["getCaptchaLoginSm"]();
        var e = this._getHost("/dl");
        var t = g + e + "/cp?&channel=0&random=" + (new Date).getTime();
        t = this._addParams(t);
        t = r._$addPdAndPkid(t);
        return t
    }
    ;
    c["mb-cp-sm"] = function(e) {
        var t = window._$pathB ? "/b/dl/zj/yd" : "/dl/zj/yd";
        var n = this._getHost(t);
        var i = this._addParamsForLoginCap(e);
        i = r._$sm4Encrypt(i);
        var a = g + n + "/cp?encParams=" + i + "&nocache=" + (new Date).getTime();
        return a
    }
    ;
    c["mb-cp"] = function(e, t, n, i) {
        if (r._$getSmState())
            return c["mb-cp-sm"](i);
        var a = this._getHost("/dl");
        var s = g + a + "/yd/cp?&channel=" + i + "&random=" + (new Date).getTime();
        s = this._addParams(s);
        s = r._$addPdAndPkid(s);
        return s
    }
    ;
    c["mb-reg-cp-sm"] = function() {
        var e = this._getHost("/zc/zj/yd");
        var t = this._addParamsForRegCap(3);
        t = r._$sm4Encrypt(t);
        var n = g + e + "/cp?encParams=" + t + "&nocache=" + (new Date).getTime();
        return n
    }
    ;
    c["mb-reg-cp"] = function() {
        if (r._$getSmState())
            return c["mb-reg-cp-sm"]();
        var e = this._getHost("/zc");
        var t = g + e + "/yd/cp?channel=3&nocache=" + (new Date).getTime();
        t = this._addRtid(t);
        t = this._addTopURL(t);
        t = r._$addPdAndPkid(t);
        return t
    }
    ;
    c["mb-ncp-sm"] = function() {
        var e = window._$pathB ? "/b/dl/dlzc/yd" : "/dl/dlzc/yd";
        var t = this._getHost(e);
        var n = this._addParamsForLoginCap(14, 1);
        n = r._$sm4Encrypt(n);
        var i = g + t + "/cp?encParams=" + n + "&nocache=" + (new Date).getTime();
        return i
    }
    ;
    c["mb-ncp"] = function(e) {
        if (r._$getSmState())
            return c["mb-ncp-sm"]();
        var t = this._getHost("/dl");
        var n = g + t + "/yd/ncp?channel=14&pd=" + e.product + "&pkid=" + e.pkid + "&pkht=" + e.pkht + "&random=" + (new Date).getTime();
        n = this._addParams(n);
        return n
    }
    ;
    c._$parseApi = function() {
        var e = {
            vfsmsup: {
                path: "/vfsmsup",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            regvftcp: {
                path: "/vftcp",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            regvfccp: {
                path: "/vfccp",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            regvfscp: {
                path: "/vfscp",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            init: {
                path: "/ini",
                type: "GET",
                isLogin: 0,
                isInit: 1,
                channel: 2
            },
            checkCaptcha: {
                path: "/vfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 0,
                channel: 2
            },
            checkName: {
                path: "/chn",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            getMailSms: {
                path: "/mlrgsm",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            getTicket: {
                path: "/gt",
                type: "POST",
                contentType: "application/json",
                isLogin: 0,
                channel: 2
            },
            fastReg: {
                path: "/frg",
                type: "POST",
                contentType: "application/json",
                isLogin: 0,
                channel: 2
            },
            sendActMail: {
                path: "/sendActMail",
                type: "GET",
                isLogin: 0,
                channel: 2
            },
            qrlogin: {
                path: "/qrcodel",
                type: "GET",
                isLogin: 1,
                channel: 3
            },
            safelogin: {
                path: "/l",
                type: "POST",
                isLogin: 1,
                channel: 0
            },
            llp: {
                path: "/llp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 0
            },
            sendSmsLogin: {
                path: "/sm",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            initComponentLogin: {
                path: "/ini",
                type: "GET",
                isLogin: 1,
                isInit: 1,
                channel: 0
            },
            checkSmsCode: {
                path: "/vfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 0
            },
            vfsms: {
                path: "/vfsms",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 0
            },
            getLoginTicket: {
                path: "/gt",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            vftcp: {
                path: "/vftcp",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            vfccp: {
                path: "/vfccp",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            vfscp: {
                path: "/vfscp",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            getPP: {
                path: "/pp",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            vfppc: {
                path: "/vfppc",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 0
            },
            vfotp: {
                path: "/vfotp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 0
            },
            mbsm: {
                path: "/mbsm",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            vfmbsms: {
                path: "/vfmbsms",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 0
            },
            goonlog: {
                path: "/go",
                type: "GET",
                isLogin: 1,
                channel: 0
            },
            "mb-qrlogin": {
                path: "/qrcodel",
                type: "GET",
                isLogin: 1,
                channel: 4
            },
            "mb-login": {
                path: "/lpwd",
                type: "POST",
                isLogin: 1,
                channel: 1
            },
            "mb-gt": {
                path: "/gt",
                type: "GET",
                isLogin: 1,
                channel: 1
            },
            "mb-ini": {
                path: "/ini",
                type: "GET",
                isLogin: 1,
                isInit: 1,
                channel: 1
            },
            "mb-login-getPower": {
                path: "/zj/yd/powGetP",
                type: "POST",
                isLogin: 1,
                channel: 1
            },
            "mb-vfcp": {
                path: "/vfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 1
            },
            "mb-lvfsms": {
                path: "/lvfsms",
                type: "POST",
                isLogin: 1,
                channel: 2
            },
            "mb-vftcp": {
                path: "/vftcp",
                type: "GET",
                isLogin: 1,
                channel: 1
            },
            "mb-vfccp": {
                path: "/vfccp",
                type: "GET",
                isLogin: 1,
                channel: 1
            },
            "mb-vfscp": {
                path: "/vfscp",
                type: "GET",
                isLogin: 1,
                channel: 1
            },
            "mb-sms-lsm": {
                path: "/lsm",
                type: "GET",
                isLogin: 1,
                channel: 2
            },
            "mb-reg-ini": {
                path: "/ini",
                type: "GET",
                isLogin: 0,
                isInit: 1,
                channel: 3
            },
            "mb-reg-sm": {
                path: "/sm",
                type: "GET",
                isLogin: 0,
                channel: 3
            },
            "mb-reg-vfsms": {
                path: "/vfsms",
                type: "POST",
                isLogin: 0,
                channel: 3
            },
            "mb-nini": {
                path: "/nini",
                type: "GET",
                isLogin: 1,
                isInit: 1,
                channel: 14
            },
            "mb-nlregssms": {
                path: "/nlregssms",
                type: "GET",
                isLogin: 1,
                channel: 14
            },
            "mb-nlgt": {
                path: "/nlgt",
                type: "GET",
                isLogin: 1,
                channel: 14
            },
            "mb-nlregvfsms": {
                path: "/nlregvfsms",
                type: "POST",
                isLogin: 1,
                channel: 14
            },
            "mb-nvfcp": {
                path: "/nvfcp",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                isLogin: 1,
                channel: 14
            },
            "mb-nvfscp": {
                path: "/nvfscp",
                type: "GET",
                isLogin: 1,
                channel: 14
            },
            "mb-nvftcp": {
                path: "/nvftcp",
                type: "GET",
                isLogin: 1,
                channel: 14
            },
            "mb-nvfccp": {
                path: "/nvfccp",
                type: "GET",
                isLogin: 1,
                channel: 14
            }
        };
        return function(t) {
            if (r._$getSmState())
                return b[t] || e[t] || {};
            else
                return e[t] || {}
        }
    }();
    c.__createDataAndSend = function() {
        var e = function(e) {
            try {
                e.topURL = window._$TOPURL
            } catch (t) {
                return
            }
        };
        return function(t, n, i, a, s) {
            var o = this._$parseApi(t);
            i += o.path;
            var c = o.isLogin;
            var l = o.isInit || "";
            var u = o.channel;
            if ("string" == typeof n)
                n = JSON.parse(n);
            if ("undefined" == typeof n.channel)
                n.channel = u;
            if (r._$isIPV6())
                if ("safelogin" === t || "llp" === t || "qrlogin" === t || "mb-qrlogin" === t || "mb-login" === t || "mb-nlregvfsms" === t || "mb-lvfsms" === t || "fastReg" === t || "mb-reg-vfsms" === t)
                    n.v6 = 1;
            e(n);
            var d = o.contentType || "application/json";
            if (!c)
                i = g + i;
            else {
                i = g + i;
                if (c) {
                    if (window._$URSOPT.opd)
                        n.opd = window._$URSOPT.opd;
                    if (window._$URSOPT.opkid)
                        n.opkid = window._$URSOPT.opkid;
                    i = this._addPathB(i)
                }
            }
            var _ = {
                isInit: l,
                url: i,
                type: o.type,
                data: n,
                contentType: d,
                isLogin: c,
                onerror: s,
                onload: a
            };
            return this.__doSend(_, o.path, t)
        }
    }();
    c.__doSend = function() {
        var e = function() {
            var e = ["device_name", "user_agent", "language", "color_depth", "pixel_ratio", "hardware_concurrency", "computer_screen", "browser_window_size", "timezone_offset", "regular_plugins", "js_fonts", "webgl_vendor", "touch_support", "canvas", "webgl", "HTTP_ACCEPT_Headers"];
            var t = ["dn", "ua", "la", "cd", "pr", "hc", "cs", "bws", "tzo", "plg", "jsf", "wv", "ts", "ca", "wgl", "hah"];
            var n = function(e) {
                var t, n;
                if (e && e.di) {
                    t = JSON.parse(e.di);
                    if (t.plg) {
                        n = t.plg;
                        for (var i = 0, r = n.length, a; i < r; i++) {
                            a = n[i];
                            a = a.split(":")[0];
                            n[i] = a
                        }
                    }
                    t.plg = n;
                    e.di = JSON.stringify(t)
                }
                return e
            };
            var i = function() {
                r._$postMessage("_parent", {
                    data: {
                        type: "webInitOk",
                        rtid: window._$RTID || "",
                        ursfp: a._$cookie("NTES_WEB_FP") || ""
                    }
                });
                var e = window.Worker ? 1 : 0;
                if (!r._$hasWebWorkerLog) {
                    r._$hasWebWorkerLog = !0;
                    r.doNssLog({
                        name: "webzj_power_pv",
                        sp: e,
                        one: 1
                    });
                    r.doNginxLog({
                        name: "webzj_power_pv",
                        sp: e,
                        ua: window.navigator.userAgent
                    })
                }
            };
            var o = function(e) {
                i();
                e.src = "WEBZJ";
                e.time = (new Date).getTime();
                var t = "//fl.reg.163.com/urs/__utm.gif?";
                var a = [];
                e = n(e);
                for (var s in e)
                    a.push(encodeURIComponent(s) + "=" + encodeURIComponent(e[s]));
                t += a.join("&");
                r._$sendLog(t)
            };
            var c = function(e, t) {
                var n = {};
                var i = {
                    page: 2
                };
                var r = a._$cookie("NTES_WEB_FP");
                i["fp"] = r || "";
                n.di = JSON.stringify(i);
                n.utid = e;
                n.rtid = t;
                o(n)
            };
            var l = function(n, i) {
                try {
                    var r = new Fingerprint2;
                    r.get(function(c, l) {
                        var u = {}, d = {}, _ = {}, h, f = [], p = a._$cookie("NTES_WEB_FP");
                        if (p)
                            c = p || "";
                        else
                            a._$cookie("NTES_WEB_FP", {
                                value: c || "",
                                expires: 30,
                                path: "/"
                            });
                        u["fp"] = c || "";
                        for (var g = 0, m; g < l.length; g++) {
                            m = l[g];
                            d[m.key] = m.value
                        }
                        for (var b = 0, v, y, $ = e.length; b < $; b++) {
                            v = e[b];
                            y = t[b];
                            u[y] = d[v] || ""
                        }
                        h = u["jsf"];
                        f = [];
                        for (var w = 0, C; w < h.length; w++) {
                            C = h[w];
                            var x = C.substring(0, 1);
                            f.push(x)
                        }
                        h = f.join("");
                        u["jsf"] = h.length + "-" + s._$sha12b64(h);
                        u["ca"] = r.x64hash128(u["ca"]);
                        u["wgl"] = r.x64hash128(u["wgl"]);
                        u.page = 1;
                        u = JSON.stringify(u);
                        _.di = u;
                        _.utid = n;
                        _.rtid = i;
                        o(_)
                    })
                } catch (l) {
                    c(n, i)
                }
            };
            return function(e, t) {
                l(e, t)
            }
        }();
        var t = function() {
            var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
                , t = 32
                , n = [];
            for (; t-- > 0; )
                n[t] = e.charAt(Math.random() * e.length);
            return n.join("")
        };
        var o = function(e, t) {
            if (!r._$isIPV6())
                try {
                    var n, i = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 24, 25, 20400, 20500];
                    var a = "https://pr.nss.netease.com/sentry/passive?uapi=" + encodeURIComponent(e);
                    var s = e.indexOf("dl-") > -1 ? 1 : 0;
                    var o = 1;
                    if (window._$URSOPT.needSendLog) {
                        n = c(t);
                        a = a + "&dataTime=" + (new Date).getTime() + "&clusterName=urs-webzj-static-passive&modelName=webzj_response_time2&one=1&isLogin=" + s + "&isBGP=" + _ + "&isNew=" + o;
                        for (var l = 0, u = i.length, d; l < u; l++) {
                            d = i[l];
                            if (d == n)
                                a = a + "&step" + d + "=1";
                            else
                                a = a + "&step" + d + "=0"
                        }
                        r._$sendLog(a)
                    }
                } catch (h) {}
        };
        var c = function(e) {
            var t = 1;
            if (e > 2e4)
                if (20400 == e || 20500 == e)
                    t = e;
                else if (e.toString().indexOf("4") > -1)
                    t = 24;
                else if (e.toString().indexOf("5") > -1)
                    t = 25;
                else
                    t = 10;
            else if (e > 1e4)
                t = 9;
            else if (e > 2e3)
                t = 8;
            else if (e > 1e3)
                t = 7;
            else if (e > 500)
                t = 6;
            else if (e > 200)
                t = 5;
            else if (e > 90)
                t = 4;
            else if (e > 60)
                t = 3;
            else if (e > 30)
                t = 2;
            return t
        };
        return function(s, c, l) {
            s = s || {};
            var u = r._$addUtid();
            window._$RTID = t();
            if (s.isInit) {
                this._$clearAllAjax();
                a._$cookie("webzjcookiecheck", {
                    value: 1,
                    expires: -1,
                    path: "/"
                });
                a._$cookie("webzjcookiecheck", {
                    value: 1,
                    expires: 1 / 24,
                    path: "/"
                });
                if (!a._$cookie("webzjcookiecheck")) {
                    s.onerror({
                        ret: "-401"
                    });
                    return
                } else
                    a._$cookie("webzjcookiecheck", {
                        value: 1,
                        expires: -1,
                        path: "/"
                    });
                e(u, window._$RTID)
            }
            if (s.data)
                s.data.rtid = window._$RTID;
            var d = s.type.toUpperCase();
            var h = {};
            if (r._$getSmState() && b[l])
                s.data = {
                    encParams: r._$sm4Encrypt(s.data)
                };
            h["Content-Type"] = s.contentType || "application/json";
            var f = 2e4;
            var p = s.url.indexOf("/yd/") >= 0 ? "yd-" + c : c;
            p = p.replace(/\//g, "");
            p = (s.isLogin ? "dl-" : "zc-") + p;
            _ = /\/\/([^\.]+2\..+\/:?)/.test(s.url) ? 1 : 0;
            var g = (new Date).getTime();
            if ("POST" == d)
                if ("application/x-www-form-urlencoded" == s.contentType)
                    s.data = n._$object2query(s.data);
                else
                    s.data = JSON.stringify(s.data);
            if ("GET" == d)
                s.data.nocache = g;
            if (1 === window._$URSOPT.APILOG)
                r._$doLog(c, s.data);
            var v = i._$request(s.url, {
                type: "json",
                method: d,
                data: s.data,
                headers: h,
                timeout: f,
                onload: function(e, t, n, i, r) {
                    if ("" === r || null === r)
                        r = {};
                    var a = r && r.ret;
                    var s = (new Date).getTime() - e;
                    o(t, s);
                    if (n.isLogin)
                        if ("201" != a)
                            this.__onerror(i, n, r);
                        else
                            this.__onsuccess(i, n, r);
                    else if ("102" === a || "104" === a || "200" === a || "201" === a || "202" === a)
                        this.__onsuccess(i, n, r);
                    else
                        this.__onerror(i, n, r)
                }
                    ._$bind(this, g, p, s, c),
                onerror: function(e, t, n, i, a) {
                    if ("" === a || null === a)
                        a = {};
                    if (0 !== a.data || void 0 !== a.result) {
                        if (a && a.data)
                            a.ret = a.data;
                        else
                            a.ret = "-1";
                        var s = (new Date).getTime() - e;
                        o(t, s);
                        var c = r._$getHttpCodeTxt(a.ret);
                        a.ret = "httpcode-" + a.ret;
                        if ("/zj/mail/go" == i || i && i.indexOf("powGetP") > -1)
                            ;
                        else
                            r._$showFail2(c);
                        r._$setIsHttpCode(1);
                        this.__onerror(i, n, a);
                        r._$setIsHttpCode(0)
                    }
                }
                    ._$bind(this, g, p, s, c)
            });
            m.push(v);
            return v
        }
    }();
    c.__sendParentData = function(e, t) {
        if (p[e]) {
            var n = {
                data: {}
            };
            var i = t.ret || -1;
            n.data["URS-CM"] = 1;
            n.data["URS-CM-STATE"] = p[e][i] || {
                ret: -1
            };
            if (t.unprotectedGuide)
                p[e][i].unprotectedGuide = 1;
            n.data["URS-CM-STATENAME"] = p[e].name;
            r._$postMessage("_parent", n)
        }
    }
    ;
    c.__onerror = function(e, t, n) {
        this.__sendParentData(e, n);
        if ("601" == n.ret)
            r._$setOutLogin(1);
        t.onerror(n)
    }
    ;
    c.__onsuccess = function(e, t, n) {
        this.__sendParentData(e, n);
        t.onload(n)
    }
    ;
    c._$clearAllAjax = function() {
        try {
            n._$forEach(m, function(e) {
                try {
                    i._$abort(e)
                } catch (t) {}
            });
            m = []
        } catch (e) {}
    }
    ;
    window.c = c;
    return c
}()


window.c._$init()
console.log(window.MP.encrypt2("123123"))